promiseUtils
require(["esri/core/promiseUtils"], function(promiseUtils) { /* code goes here */ });
esri/core/promiseUtils
Various utilities and convenience functions for working with promises.
Method Overview
Name | Return Type | Summary | Object | |
---|---|---|---|---|
Promise | Convenience utility method for creating and resolving a promise. more details | more details | promiseUtils | |
Error | Creates a special error object which is used to signal aborted requests in promise chains. more details | more details | promiseUtils | |
Function | A utility for ensuring an input function is not simultaneously invoked more than once at a time. more details | more details | promiseUtils | |
Promise|Object | Convenience utility method to wait for a number of promises to either resolve or reject. more details | more details | promiseUtils | |
Promise | A convenience utility method for filtering an array of values using an asynchronous predicate function. more details | more details | promiseUtils | |
Boolean | Check if the provided error object is the special kind of error with which promises are rejected when they are aborted. more details | more details | promiseUtils | |
Promise | Convenience utility method to create a promise that has been rejected with a provided error value. more details | more details | promiseUtils | |
Promise | Convenience utility method to create a promise that will be resolved with a provided value. more details | more details | promiseUtils |
Method Details
- create(executor){Promise}
Convenience utility method for creating and resolving a promise.
Parameter:executor ExecutorA function that will be called with two methods,
resolve
andreject
.Returns:Type Description Promise A promise that will be fulfilled by the executor. Examples: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([ "esri/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([ "esri/renderers/ClassBreaksRenderer" ], resolve); }).then(function(ClassBreaksRenderer) { // Create renderer and apply it to the desired layer }); } });
- createAbortError(){Error}
Creates a special error object which is used to signal aborted requests in promise chains. Promises that are rejected due to abort signals should reject with this kind of error.
Returns:Type Description Error A special error object that signals an aborted request. Example:// Request multiple files and return results in an array function requestMultiple(urls, abortSignal) { // Fire off requests var 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; }); }
- Since: ArcGIS API for JavaScript 4.12
A utility for ensuring an input function is not simultaneously invoked more than once at a time. This is useful for highly interactive applications such as those that execute statistic queries on mouse-move or mouse-drag events. Rather than execute the query for each such event, you can "debounce", or cancel the function execution, until the previous execution of the same function call finishes. This improves the performance and user experience of such applications.
Parameter:callback FunctionA function to prevent executing during the execution of a previous call to the same function. This is typically a function that may be called on mouse-move or mouse-drag events.
Returns:Type Description Function A function with the same signature as the callback. - See also:
Example:// 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)));
Convenience utility method to wait for a number of promises to either resolve or reject. The resulting promise resolves to an array of result objects containing the promise and either a value if the promise resolved, or an error if the promise rejected.
Parameter:Array of promises, or object where each property is a promise.
Returns:Type Description Promise | Object If called with an array of promises, resolves to an array of result objects containing the original promise and either a value (if the promise resolved) or an error (if the promise rejected). If called with an object where each property is a promise, then resolves to an object with the same properties where each property value is a result object. Example: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}
A convenience utility method for filtering an array of values using an asynchronous predicate function.
Parameters:input ArrayThe array of input values to filter.
predicate FilterPredicateCallbackA predicate function returning a promise. Only array entries for which the returned promise contains
true
are kept.Returns:Type Description Promise A promise containing an array of values that passed the predicate check.
- isAbortError(error){Boolean}
Check if the provided error object is the special kind of error with which promises are rejected when they are aborted.
Parameter:error ErrorThe error object to test.
Returns:Type Description Boolean true
if the error is an abort error,false
otherwise.Example:// 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); } }); } var controller = new AbortController(); var url = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer"; logHTTPDocumentToConsole(url, controller.signal); // Cancel the request controller.abort();
- reject(error){Promise}
Convenience utility method to create a promise that has been rejected with a provided error value.
Parameter:error ObjectoptionalThe error to reject the resulting promise with.
Returns:Type Description Promise A promise which is rejected with the provided error. Example:if (!data || !data.url) { return promiseUtils.reject(new Error("url is a required options property")); }
- resolve(value){Promise}
Convenience utility method to create a promise that will be resolved with a provided value.
Parameter:value *optionalThe value to resolve the resulting promise with.
Returns:Type Description Promise A promise which is resolved with the provided value. Example:// createGraphics will return a Promise that // resolves to graphics array 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); }
Type Definitions
- EachAlwaysResult Object
The result object for a promise passed to promiseUtils.eachAlways.
- Properties:
- promise Promise
The promise that has been fulfilled.
optionalvalue *The value with which the promise resolved. Defined only if the promise resolved.
optionalerror *The error with which the promise rejected. Defined only if the promise rejected.
- Executor(resolve, reject)
A function that defines how a promise created in create() is resolved and rejected.
Parameters:resolve ResolveCallbackA function that will fulfill the promise.
reject RejectCallbackA function that will handle the rejection of the promise.
- FilterPredicateCallback(value, index){Promise}
Callback to be called for each entry of an array to be filtered.
Parameters:value *The value of the array entry.
index NumberThe index of the entry within the array.
Returns:Type Description Promise A promise that resolves to a boolean value, indicating whether the entry should be kept in the filtered array.
- RejectCallback(error)
A function that will reject the promise created in create().
Parameter:error *optionalThe error with which the promise rejected. Defined only if the promise is rejected.