javascript - 如何重构js promise 链

标签 javascript refactoring ionic-framework

重构这个 promise 链的好方法是什么?一定有更好的方法......但我似乎无法弄清楚。谢谢

       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)
        })

最佳答案

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);

关于javascript - 如何重构js promise 链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32604735/

相关文章:

javascript - 如何使 AngularJS 路由像 index.html#/myPage 一样与 index.html/#/myPage 一起工作

swift - 除了重构和重命名类或属性名称之外,swift 中还有什么其他可用选项?

php - 通过合并PHP和MySql覆盖的条件是否有利于减少DB调用次数

cordova - Ionic 4 Android 应用程序无法在构建时加载源代码

ios - parse.com 推送通知框架不适用于 ionic 框架 Xcode 项目?

angular - 在 ionic 3 应用程序中捕获 youtube 嵌入视频事件

javascript - 触发 sibling 的CSS悬停效果?

javascript - 在 Angular 2 和 Typescript 中发布对象的问题

ruby - 如何收紧这段 Ruby 代码?

javascript - 如何防止通过直接输入浏览器网址栏来查看/下载文本或脚本文件?