【发布时间】:2018-10-23 02:23:41
【问题描述】:
我有一个普通的 XHR 请求和 json 响应。我还有另一个 arcgis 查询任务要执行。
上述两个异步请求可以使用dojo/promise/all来处理所有返回的响应吗?如果是,怎么做?
【问题讨论】:
我有一个普通的 XHR 请求和 json 响应。我还有另一个 arcgis 查询任务要执行。
上述两个异步请求可以使用dojo/promise/all来处理所有返回的响应吗?如果是,怎么做?
【问题讨论】:
是的。 首先,XHR 对象应该由 esri/request 创建。返回的对象是 promise。 queryTask 对象是 promise。
代码如下:
<script>
require(['dojo/Deferred', 'dojo/promise/all',"esri/request", "esri/config", "esri/tasks/QueryTask","esri/tasks/query"], function(Deferred, all,esriRequest,esriConfig,QueryTask,Query) {
// code to initate query tasks here
var qURL = "https://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/5";
var queryTask = new QueryTask(qURL);
var query = new Query();
query.returnGeometry = false;
query.where = "STATE_NAME='California'";
query.outFields = ["*"];
esriConfig.defaults.io.corsEnabledServers.push("earthquake.usgs.gov");
esriConfig.defaults.io.corsEnabledServers.push("https://sampleserver1.arcgisonline.com");
var url = "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/1.0_day.geojson";
var requestHandle = esriRequest({
"url":url
});
var deferredTask1 = new Deferred();
queryTask.execute(query );
queryTask.on("complete", function(evt1) {
deferredTask1.resolve(evt1);
});
all([deferredTask1, requestHandle]).then(function(results) {
// results will be an Array
var t=results;
console.log("state fips =" +results[0].featureSet.features[0].attributes["STATE_FIPS"]);
console.log("earthquake id=" +results[1].features[0].id);
});
});
</script>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script src="https://js.arcgis.com/3.26/"></script>
</head>
<body>
</body>
</html>
【讨论】: