我有一系列异步调用,使用dojo.Deferred对象链接在一起作为异步包装器(至少我理解它)和.then()函数来“链接”异步调用。
在链中的任何一个链接上,某些测试可能会失败(例如我的异步存储提取没有返回任何对象等),我想优雅地退出整个.then()链。
这是使用链的形式。我如何杀死我指示的整个链?
asyncFunc(...).then( function(args) {
//stuff...
return myDeferredReturningFunction(args);
}).then( function(args2) {
//do some test on args2
//if test fails, **how to cancel the chain here?**
}).then( function(args3) { ... etc etc ...
注意:也许有人可以将其标记为“dojo.Deferred”?
答案 0 :(得分:2)
抛出异常应该是一种简单的纾困方式,因为它会跳出任何回调并进入任何补充或后续的错误。
快速举例:
dojo.xhrGet({url:'base.php'})
.then(function() { console.log('foo'); throw 'argh!';})
.then(function() { console.log('bar'); }); // bar never gets printed
更多信息:
http://www.sitepen.com/blog/2009/03/31/queued-demystifying-deferreds/
http://www.sitepen.com/blog/2010/05/03/robust-promises-with-dojo-deferred-1-5/