如何重构js承诺链

时间:2015-09-16 09:31:15

标签: javascript refactoring ionic

重构这一承诺链的好方法是什么?必须有一个更好的方法......但我似乎无法弄明白。 THX

       loginPromise.then(function() {
            loadConfigFirebase().then(function() {
                setupUserObj().then(function() {
                    saveUserFirebase().then(function() {
                        loadUserFirebase().then(function() {
                            ionicUserIdentify().then(function() {
                                registerDeploy().then(function() {
                                    $ionicLoading.hide();
                                    q.resolve();
                                }).catch(function(err) {
                                    displayError(err)
                                })
                            }).catch(function(err) {
                                displayError(err)
                            })
                        }).catch(function(err) {
                            displayError(err)
                        })
                    }).catch(function(err) {
                        displayError(err)
                    })
                }).catch(function(err) {
                    displayError(err)
                })
            }).catch(function(err) {
                displayError(err)
            })
        }).catch(function(err) {
            displayError(err)
        })

1 个答案:

答案 0 :(得分:3)

function chainPromise(promise, fns, errorFn){
    if(!fns.length){
        return;
    }

    promise.then(function(){
        var fn = fns.shift();

        chainPromise(fn(), fns, errorFn);
    }).catch(errorFn);
}

chainPromise(loginPromise, [
    loadConfigFirebase,
    setupUserObj,
    saveUserFirebase,
    loadUserFirebase,
    ionicUserIdentify,
    registerDeploy,
    function(){
        $ionicLoading.hide();
        q.resolve();
    }
], displayError);