小姜哥的微信

dojo异步编程之dojo/promise/all模块(dojo/DeferredList替代者)

之前写了篇博客“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,不建议使用。

推荐文章

回到顶部