promiseUtils

AMD: require(["geoscene/core/promiseUtils"], (promiseUtils) => { /* code goes here */ });
ESM: import * as promiseUtils from "@geoscene/core/core/promiseUtils.js";
对象: geoscene/core/promiseUtils
起始版本:GeoScene Maps SDK for JavaScript 4.2

使用 promises 的各种实用程序和便利函数。

方法概述

名称 返回值类值 描述 对象
Error

创建一个特殊的错误对象,用于在 promise 链中发出中止请求的信号。

更多详情
promiseUtils
Function

用于确保输入函数不会在同一时间被调用多次的实用程序。

更多详情
promiseUtils
Promise|Object

便利的实用程序方法,用于等待许多 promise 解决或拒绝。

更多详情
promiseUtils
Promise

便利的实用程序方法,用于使用异步谓词函数过滤值数组。

更多详情
promiseUtils
Boolean

检查提供的错误对象是否是 promise 中止时被拒绝的特殊类型的错误。

更多详情
promiseUtils

方法详细说明

createAbortError(){Error}

创建一个特殊的错误对象,用于在 promise 链中发出中止请求的信号。由于中止信号而被拒绝的 Promises 应拒绝这种错误。

返回
类型 描述
Error 一个特殊错误对象,用于发出中止请求的信号。
示例
// Request multiple files and return results in an array
function requestMultiple(urls, abortSignal) {
  // Fire off requests
  let promises = urls.map(url => request(url, { signal: abortSignal });

  // Wait until all requests have either resolved or rejected
  promiseUtils.eachAlways(urls)
    .then(results => {
      if (abortSignal && abortSignal.aborted) {
        // If the user has triggered the abortSignal, all requests will react and reject. eachAlways resolves with
        // an array that contains the reject error for each request. Instead of returning this array as a result, we
        // should reject the promise returned to the user with an abort error.
        throw promiseUtils.createAbortError();
      }
      return results;
  });
}
debounce(callback){Function}static
起始版本:GeoScene Maps SDK for JavaScript 4.12

用于确保输入函数不会在同一时间被调用多次的实用程序。这对于高度交互式的应用程序非常有用,例如对鼠标移动或鼠标拖动事件执行统计查询的应用程序。您不必对每个此类事件执行查询,而是可以取消函数执行,直到同一函数调用的前一次执行完成。这提高了此类应用程序的性能和用户体验。

参数
callback Function

此函数用于防止在执行对同一函数的上一个调用期间执行。这通常是可以在鼠标移动或鼠标拖动事件时调用的函数。

返回
类型 描述
Function 与回调具有相同签名的函数。
另请参阅
示例
// Queries a layer for the count of features that intersect a
// 1 km buffer of the pointer location. The debounce() method
// prevents the updateStatistics function from executing before
// a previous invocation of the same function finishes.
const updateStatistics = promiseUtils.debounce(function (geometry) {
  return layerView.queryFeatures({
    geometry,
    distance: 1,
    units: "kilometers",
    outStatistics: [{
      onStatisticField: "*",
      outStatisticFieldName: "feature_count",
      statisticType: "count"
    }]
  }).then(function(featureSet) {
    console.log(`Feature Count: ${featureSet.features[0].attributes["feature_count"]}`);
  });
});

view.on("drag", (event) => updateStatistics(view.toMap(event)));
eachAlways(promises){Promise|Object}

便利的实用程序方法,用于等待许多 promise 解决或拒绝。结果 promise 解析为包含 promise 的结果对象数组,如果 promise 被解析,则解析为一个值,如果 promise 被拒绝,则解析为一个错误。

参数
promises Promise[]|Object

promise 数组,或每个属性都是 promise 的对象。

返回
类型 描述
Promise | Object 如果使用 promise 数组调用,则解析为包含原始 promise 的结果对象数组,值 (如果 promise 已解决) 或错误 (如果 promise 被拒绝)。如果使用每个属性都是 promise 的对象调用,则解析为具有相同属性的对象,其中每个属性值都是结果对象
示例
const controller = new AbortController();

// Query for the number of features from
// multiple feature layers
function queryLayerFeatureCount(whereClauses) {
  // pass each whereClause item into callback function
  return promiseUtils.eachAlways(whereClauses.map(function (whereClause) {
    return layer.queryFeatureCount(whereClause, {
      signal: controller.signal
    });
  }));
}

queryLayerFeatureCount(whereClauses).then(function(eachAlwaysResults) {
   eachAlwaysResults.forEach(function(result) {
     // If a Promise was rejected, you can check for the rejected error
     if (result.error) {
       console.log("There was an error in your query.", result.error);
     }
     // The results of the Promise are returned in the value property
     else {
       console.log("The number of features are: " + result.value);
     }
   });
});
filter(input, predicate){Promise}

便利的实用程序方法,用于使用异步谓词函数过滤值数组。

参数
input Array

要过滤的输入值的数组。

返回 promise 的谓词函数。仅保留返回的 promise 包含 true 的数组条目。

返回
类型 描述
Promise 包含通过谓词检查的值数组的 promise。
isAbortError(error){Boolean}

检查提供的错误对象是否是 promise 中止时被拒绝的特殊类型的错误。

参数
error Error

要测试的错误对象。

返回
类型 描述
Boolean true ,如果错误是中止错误,否则为 false
示例
// This function fetches a document via HTTP and logs its content to the console once available
function logHTTPDocumentToConsole(url, abortSignal) {
  // Pass the abort signal into `request` to make it cancelable
  request(url, { signal: abortSignal })
    .then((response) => {
      console.log(response.data);
    })
    .catch((error) => {
      if (!promiseUtils.isAbortError(error)) {
        // Only log request failures and ignore cancellations
        console.error("request error", error);
      }
    });
}

let controller = new AbortController();

let url = "url";
logHTTPDocumentToConsole(url, controller.signal);

// Cancel the request
controller.abort();

类型定义

EachAlwaysResult Object

传递给 promiseUtils.eachAlways 的 promise 的结果对象。

属性
promise Promise

已实现的 promise。

value *
optional

解析 promise 所使用的值。仅当 promise 解决时才定义。

error *
optional

拒绝 promise 所使用的错误。仅当 promise 被拒绝时才定义。

Executor(resolve, reject)

该函数用于定义如何解决和拒绝在 create() 中创建的 promise。

参数

实现 promise 的函数。

处理拒绝 promise 的函数。

FilterPredicateCallback(value, index){Promise}

为要过滤的数组的每个条目调用的回调。

参数
value *

数组条目的值。

index Number

数组中条目的索引。

返回
类型 描述
Promise 解析为布尔值的 promise,用于指示是否应将条目保留在过滤的数组中。
RejectCallback(error)

此函数将拒绝在 create() 中创建的 promise。

参数
error *
optional

拒绝 promise 所使用的错误。仅当 promise 被拒绝时才定义。

ResolveCallback(value)

此函数将解析在 create() 中创建的 promise。

参数
value *|Promise<*>
optional

解析 promise 所使用的值。仅在执行 promise 时才定义。

您的浏览器不再受支持。请升级您的浏览器以获得最佳体验。