之前写了篇博客“ http://blog.csdn.net/tt361/article/details/8924918”,写的是dojo的异步编程(dojo/Deferred模块),本篇博客算是一个补充,写写必须两个Deferred对象都resolve时才调用某函数该怎么做。
可以通过dojo/promise/all模块完成,先看例子。
require(["dojo/promise/all","dojo/Deferred"],function(all,Deferred){ function defer1(){ var deferred = new Deferred(); setTimeout(function(){ deferred.resolve("defer1"); // deferred.reject("defer1"); },2000); return deferred; } function defer2(){ var deferred = new Deferred(); setTimeout(function(){ deferred.resolve("defer2"); },200); return deferred; } all({ defer1 : defer1(),defer2 : defer2() }).then(function(rs){ console.log(rs.defer1,rs.defer2); },function(rs){ console.log(rs) }); });非常的简单,all模块(一个函数)可以接收一个数组或者一个对象作为参数,数组的每个元素(对象的属性)需要是一个Deferred对象,当所有的Deferred对象都resolve时调用第一个回调函数,其中一个失败调用第二个回调函数。 第一个回到函数的参数是数组或者对象(视all的参数是数组还是对象而定);第二回调函数的参数是第一个失败Deferred对象的信息。 另外dojo/promise/first与all用法类似,不同的是前者为当有一个Deferred对象完成时(resolve或者reject)就调用回调函数,first随即完成。 dojo/DeferredList完成的功能与all相同但DeferredList是deprecated,不建议使用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。