promiseUtils

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

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

方法概述

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

用于创建和解析 promise 的便利实用程序方法。

更多详情
promiseUtils
Error

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

更多详情
promiseUtils
Function

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

更多详情
promiseUtils
Promise|Object

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

更多详情
promiseUtils
Promise

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

更多详情
promiseUtils
Boolean

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

更多详情
promiseUtils

方法详细说明

create(executor){Promise}
已弃用从 4.24 版开始。请改为使用 Promise

用于创建和解析 promise 的便利实用程序方法。

参数
executor Executor

将使用以下两个方法调用的函数:resolvereject

返回
类型 描述
Promise 由执行者来完成的 promise。
示例
function fetchImage(url) {
  return promiseUtils.create(function(resolve, reject){
    const image = document.createElement("img");
    image.onload = function() {
      image.load = image.onerror = null;
      resolve(image);
    };

    image.onerror = function() {
      image.load = image.onerror = null;
      reject(new Error("Error while loading the image"));
    }

    image.src = url;
  });
}

fetchImage(".........")
  .then(function(image){
    console.log(image);
  });
// Load multiple modules conditionally
require([
  "geoscene/core/promiseUtils"
], function( promiseUtils ) {
  // load modules based on whether a user selects
  // a UI option to apply class breaks to a layer
  if (classBreaksSelected) {
    return promiseUtils.create(function(resolve, reject) {
      require([ "geoscene/renderers/ClassBreaksRenderer" ], resolve);
    }).then(function(ClassBreaksRenderer) {
      // Create renderer and apply it to the desired layer

    });
  }
});
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 = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer";
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 时才定义。

您的浏览器不再受支持。请升级您的浏览器以获得最佳体验。请参阅浏览器弃用帖子以获取更多信息