2015-09-16 84 views
0

重構這個承諾鏈條的好方法是什麼?必須有更好的辦法...但我似乎無法弄清楚。 THX如何重構js承諾鏈條

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

我希望看到一個沒有重構支撐功能,但能正常工作,它是很乾淨。謝謝 –