promiseUtils
用于处理promise的各种实用工具和方便函数。
方法概述
create():用于创建和解决promise的方便实用方法。
createAbortError():创建一个特殊的错误对象,用于向promise链中中止的请求发送信号。
debounce():确保输入函数不会同时被多次调用的实用程序。
eachAlways():方便实用的方法等待多个promise来解决或拒绝。
filter():一种使用异步谓词函数过滤数组值的实用工具方法。
isAbortError():检查所提供的错误对象是否是在放弃promise时拒绝promise的特殊类型的错误。
reject():方便实用方法,用于创建具有提供的错误值的已拒绝的promise。
resolve():方便实用程序方法,用于创建将使用所提供的值解决的promise。
方法简介
- create(executor):用于创建和解决promise的方便实用方法。返回值类型Promise。参数
- executor :用两个方法(resolve和reject)调用的函数。
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);
});
// 有条件地加载多个模块
require([
"esri/core/promiseUtils"
], function( promiseUtils ) {
// 根据用户是否选择 UI选项来将类中断应用到一个层来加载模块。
if (classBreaksSelected) {
return promiseUtils.create(function(resolve, reject) {
require([ "esri/renderers/ClassBreaksRenderer" ], resolve);
}).then(function(ClassBreaksRenderer) {
// 创建渲染器,并应用它到所需的层。
});
}
});
- createAbortError():创建一个特殊的错误对象,用于向promise链中中止的请求发送信号。由于中止信号而被拒绝的promise应该会因为这种错误而被拒绝。返回值类型Error。
// 请求多个文件并返回数组中的结果。
function requestMultiple(urls, abortSignal) {
// 发出请求
var promises = urls.map(url => request(url, { signal: abortSignal });
// 等待直到所有请求都被解决或拒绝。
promiseUtils.eachAlways(urls)
.then(results => {
if (abortSignal && abortSignal.aborted) {
//如果用户触发了abortSignal,所有请求都将做出反应并拒绝。每个请求总是通过一个数组来解析,该数组包含每个请求的拒绝错误。
//我们应该拒绝使用中止错误返回给用户的承诺,而不是返回该数组的结果。
throw promiseUtils.createAbortError();
}
return results;
});
}
- debounce(callback):确保输入函数不会同时被多次调用的实用程序。这对于高度交互的应用程序非常有用,比如对鼠标移动或鼠标拖动事件执行统计查询的应用程序。不必为每个此类事件执行查询,您可以“取消”或取消函数执行,直到相同函数调用的前一次执行结束。这将改善此类应用程序的性能和用户体验。返回值为Function。参数
- callback :在对同一函数的前一个调用执行期间防止执行的函数。这通常是在鼠标移动或鼠标拖动事件上调用的函数。
// 查询与指针位置的1公里缓冲区相交的特征数。debounce()方法可以防止updateStatistics函数在之前调用相同的函数后执行。
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来解决或拒绝。生成的promise解析为一个结果对象数组,其中包含promise和一个值(如果promise已解析),或者一个错误(如果promise被拒绝)。参数
- promises :promise数组或对象,其中每个属性都是一个promise。
const controller = new AbortController();
// 查询来自多个特性层的特性数量
function queryLayerFeatureCount(whereClauses) {
//将每个whereClause项传递到回调函数。
return promiseUtils.eachAlways(whereClauses.map(function (whereClause) {
return layer.queryFeatureCount(whereClause, {
signal: controller.signal
});
}));
}
queryLayerFeatureCount(whereClauses).then(function(eachAlwaysResults) {
eachAlwaysResults.forEach(function(result) {
// 如果一个promise被拒绝,您可以检查被拒绝的错误
if (result.error) {
console.log("There was an error in your query.", result.error);
}
// promise的结果在value属性中返回
else {
console.log("The number of features are: " + result.value);
}
});
});
- filter(input, predicate):一种使用异步谓词函数过滤数组值的实用工具方法。返回值类型Promise。参数
- input :要筛选的输入值数组。
- predicate :返回promise的判定函数。只有返回的promise为真的数组条目才被保留。
- isAbortError(error):检查所提供的错误对象是否是在放弃promise时拒绝promise的特殊类型的错误。返回值类型Boolean。参数
- error :要测试的错误对象。
//此函数通过HTTP获取文档,并在可用时将其内容记录到控制台。
function logHTTPDocumentToConsole(url, abortSignal) {
// 将中止信号传递到“request”,使其可取消
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);
}
});
}
var controller = new AbortController();
var url = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer";
logHTTPDocumentToConsole(url, controller.signal);
//取消请求
controller.abort();
- reject(error):方便实用方法,用于创建具有提供的错误值的已拒绝的promise 。返回值类型Promise。参数
- error :拒绝结果Promise的错误。
if (!data || !data.url) {
return promiseUtils.reject(new Error("url is a required options property"));
}
- resolve(value):方便实用程序方法,用于创建将使用所提供的值解决的promise。返回值类型promise。参数
- value:用于解决结果promise的值。
//createGraphics将返回promise解析为图形数组
function createGraphics() {
var graphics = geoJson.features.map(function(feature, i) {
return new Graphic({
geometry: new Point({
x: feature.geometry.coordinates[0],
y: feature.geometry.coordinates[1]
}),
attributes: {
ObjectID: i,
title: feature.properties.title
}
});
});
return promiseUtils.resolve(graphics);
}
类型概述
- EachAlwaysResult :一个promise的结果对象传递给promise . eachalways。属性
- promise:已经实现的promise。
- value:用于解析promise的值。仅在promise解析时定义。
- error:拒绝promise的错误。仅当promise被拒绝时定义。
- Executor(resolve, reject):定义如何解析和拒绝在create()中创建的promise的函数。参数
- resolve:一个实现promise的函数。
- reject:一个处理拒绝promise的函数。
- FilterPredicateCallback(value, index):对要筛选的数组的每个项调用的回调。返回值promise。为参数
- value:数组项的值。
- index:数组中条目的索引。
- RejectCallback(error):拒绝在create()中创建的promise的函数。参数
- error:拒绝promise的错误。仅当promise被拒绝时定义。
- ResolveCallback(value):解析在create()中创建的promise的函数。参数
- value:用于解析promise的值。只有在promise实现时才定义。
版权声明:
作者:Gomo
链接:https://www.develophm.com/index.php/promiseutils/875/
来源:开发之家
文章版权归作者所有,未经允许请勿转载。
THE END
二维码
共有 0 条评论