Asynchronous 如何组合Dojo.Deferred+;dojo.data.read

Asynchronous 如何组合Dojo.Deferred+;dojo.data.read,asynchronous,dojo,Asynchronous,Dojo,我有一系列要执行的异步事件,其中一些是fetch命令。我了解使用dojo.Deferred的基本知识,但到目前为止,我所有添加fetch回调的尝试都失败了 我试图做的是1)向我的延迟对象添加一个fetch调用2)运行fetch函数,可能带有一些额外的参数,3)将“fetched”值传递给链中的下一个回调。。。以下是我得到的: var myDeferred = new dojo.Deferred(); myDeferred.addCallback(this.myStore.fetch({query

我有一系列要执行的异步事件,其中一些是
fetch
命令。我了解使用
dojo.Deferred
的基本知识,但到目前为止,我所有添加
fetch
回调的尝试都失败了

我试图做的是1)向我的
延迟对象添加一个fetch调用2)运行fetch函数,可能带有一些额外的参数,3)将“fetched”值传递给链中的下一个回调。。。以下是我得到的:

var myDeferred = new dojo.Deferred();
myDeferred.addCallback(this.myStore.fetch({query:{//some query//}, 
    onComplete: function(items) { return items } })); //add the fetch callback? i think this is wrong...
myDeferred.addCallback(function(items) { console.log(items) }); //log the fetched items

myDeferred.callback(); //to fire

你必须在回叫回执时发出延迟通知

var myDeferred = new dojo.Deferred();
this.myStore.fetch({
    query:{//some query//}, 
    onComplete: function(items) { myDeferred.callback(items); }
})
myDeferred.addCallback(function(items) { console.log(items) }); //log the fetched items
如果您有多个回迁,您应该查看DeferredList并从延迟回调返回延迟。两者都可以用来创建相当复杂的行为。
您还应该研究新的dojo 1.5 Deferred,它有一个更简单的使用模式,这可能会对您有所帮助。

从1.5开始,您可以在Deferreds上使用.then()方法轻松链接它们。