嘿伙计们,我不太精通处理异步设计模式,而且我在编写执行两次异步数据提取的脚本时遇到了问题。
我正在使用 Dojo.data.api.Read.Fetch() 从不同的数据库进行两次 fetch() 调用。结果异步返回。但是,我必须交叉引用结果,所以我希望我的脚本在两个异步提取完成后继续。我不知道该怎么做,这就是问题所在。
我我知道提取的onComplete 字段以及如何使用它,但我看到的最佳案例解决方案是在首先取。我想同时进行这些提取。有办法做到这一点吗?
为了便于说明,这是我的程序的当前结构:
this.dict1.fetch({query:"blahblahblah", onComplete: function(items) { <em>something here?</em> }});<br/>
this.dict2.fetch({query:"blahblahbleh", onComplete: function(items) { <em>or maybe something here?</em> }});<br/>
this.orMaybeDoSomethingAfterBothFetches()
如有任何帮助,我们将不胜感激!
最佳答案
您可以为每个提取创建 dojo.Deferreds,然后使用 dojo.DeferredList 并将延迟添加到其中 - 参见 here .此解决方案允许您利用将“n”个函数添加到要调用的函数列表中的优势。它还利用了所有 dojo.Deferred 的回调和 errBack 功能。
var fetch1 = new dojo.Deferred();
fetch1.addCallback(this.dict1.fetch...);
var fetch2 = new dojo.Deferred();
fetch2.addCallback(this.dict2.fetch...);
var allFuncs = new dojo.DeferredList([fetch1, fetch2]);
var doStuffWhenAllFuncsReturn = function() {...};
allFuncs.addCallback(doStuffWhenAllFuncsReturn);
关于javascript - Dojo 获取,如何等待两个同时的异步获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2967580/