我有嵌套的promise调用结构如下:
validateUser()
.then(() => {
getUserInformation()
.then((userInformation) => {
Promise.all([
getUserDebitAccounts(userInformation),
getUserCreditAccounts(userInformation)
])
.then(([drAcc, crAcc]) => {
//do something
})
})
})
.catch(error => {
callback(error);
});
首先有一种简化这些嵌套调用的方法吗?如您所见,它们是依赖的结构。所以这是我提出的最合乎逻辑的方式。
其次,我可以在结尾处使用catch
来捕获所有上述呼叫中的所有拒绝。我是否必须为每次通话添加单独的catch
?
第三,我想写一个mocha测试,对于这些方法,我必须做什么级别的Promise模拟,一些大纲会有所帮助。
有什么建议吗?
答案 0 :(得分:0)
是的,you can and should flatten your chain。要做到这一点,您需要then
回调中的return
the inner promises,无论如何您都需要这些回调才能使单catch
完成工作。
return validateUser()
.then(getUserInformation)
.then(userInformation =>
Promise.all([
getUserDebitAccounts(userInformation),
getUserCreditAccounts(userInformation)
])
).then(([drAcc, crAcc]) => {
// do something
return …;
})
.catch(error => {
console.error(error);
});