正确处理多个异步调用独立工作的承诺

时间:2017-06-18 04:53:20

标签: javascript angularjs

我的程序结构是这样的

 function a(){
    b().then(function(res){
    })
    f().then(function(res){
    })
    }

    and then function c(){
    d().then(function(res){
    });
    e().then(function(res){

    })
    };

    function b(){
    //async operation
    }
    function f(){
    //async operation
    }
    function e(){
    //async operation
    }
    function d(){
    //async operation
    }

我想要实现的是当b中的每个函数都完成后,c必须开始工作,所以基本上我需要一些帮助来构造我的程序但是我不能改变我的内部函数,因为我写了很多他们和超时工作但我知道这是一个非常糟糕的解决方法,但如果你能用最少的修改建议怎么做,那将是有帮助的,即使我必须修改它将是什么这样做的最佳方法是什么? ,所以我可以防止将来出现错误。

我终于通过正确使用promise.push解决了这个问题,然后解决了$ q.all(promise)中的所有承诺

function a() {
    var deferred = $q.defer();
    deferred.resolve('a')
    return deferred.promise;
}

function b() {
    var deferred = $q.defer();
    deferred.resolve('b')
    return deferred.promise;
}

function a() {
    var deferred = $q.defer();
    deferred.resolve('a')
    return deferred.promise;
}

function b() {
    var deferred = $q.defer();
    deferred.resolve('b')
    return deferred.promise;
}

function g() {
    var deferred = $q.defer();
    deferred.resolve('a')
    return deferred.promise;
}

function h() {
    var deferred = $q.defer();
    deferred.resolve('b')
    return deferred.promise;
}


function c() {
    var deferred = $q.defer();
    var promise = [];
    promise.push(a().then(function(res) {
        return res
    }));
    promise.push(b().then(function(res) {
        return res;
    })) $q.all(promise).then(function(res) {
        deferred.resolve(res);
    }) return deferred.promise;
}

function e() {
    var deferred = $q.defer();
    var promise = [];
    promise.push(g().then(function(res) {
        return res
    })) promise.push(h().then(function(res) {
        return res;
    })) $q.all(promise).then(function(res) {
        deferred.resolve(res);
    }) return deferred.promise;

}

function final() {
    var deferred = $q.defer();
    var promise = [];
    promise.push(c().then(function(res) {
        return res
    })) promise.push(e().then(function(res) {
        return res;
    })) $q.all(promise).then(function(res) {
        deferred.resolve(res);
    }) return deferred.promise;
}

final().then(function(res) {
    console.log('move next')
})

0 个答案:

没有答案