如何重构js承诺链
How to refactor chain of js promises
重构这个承诺链的好方法是什么?必须有更好的方法......但我似乎无法弄清楚。感谢
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);
重构这个承诺链的好方法是什么?必须有更好的方法......但我似乎无法弄清楚。感谢
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);