gpt4 book ai didi

asynchronous - dojo 被 for 循环推迟

转载 作者:行者123 更新时间:2023-12-04 04:49:44 24 4
gpt4 key购买 nike

我在处理 for 循环中延迟的 dojo 时遇到问题。我现在正在解决这个问题,但是来自更高层的任何见解都会真正有帮助,这已经是多日的事情了。似乎 Dojo deferred 只能解决一次,这导致它在 for 循环中崩溃。异步处理多个响应的最佳方法是什么。

这是我的代码段,没有全局变量,在此代码段之外声明了一些变量。

*编辑:Dojo 有一个 .then() 应该处理异步请求。这对任何人来说是否正确,当使用“then()”时,我可以看到调用开始,但它们从未显示为已完成。我需要在 then 之后添加一个 c 'deferred.callback' 吗? *

for (var j = 0; j < ident.length; j++) {
if(ident[j].url != "http://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Reference/MapServer"){
deferred = ident[j].execute(idParams);
}
deferred.*then*(function(response){
return dojo.map(response, function(result){
var feature = result.feature;
feature.attributes.layerName = result.layerName;
//console.log(feature.attributes);
lyrIdent.push(feature.attributes);
var template = new esri.InfoTemplate("Prefix: ${PREFIX} <br/>Suffix: ${SUFFIX}<br/>Divcode: ${DIVCODE}<br/> lmp: ${LMP} <br/>hmp: ${HMP}");
feature.setInfoTemplate(template);
return feature;
});
});
}

最佳答案

现在你有一个用于延迟对象的变量。如果你想进行多个异步调用,那么你需要创建多个 Deferred 对象,每个调用一个(如果你把它们放在一起,你怎么知道每个不同的调用何时完成?)

var deferreds = [];
for(var i=0; i<N; i++){
deferreds[i] = your_async_request();
}

获得 promise 列表后,您应该可以使用 all function (或类似的东西)获取该 promise 列表并将其转换为单个 promise ,当它们全部完成时返回结果列表。
require(["dojo/promise/all"], function(all){

all([promise1, promise2]).then(function(results){
// results will be an Array
});

});

关于asynchronous - dojo 被 for 循环推迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17618763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com