Javascript 为嵌套承诺调用编写mocha测试
我有如下嵌套的承诺调用结构:Javascript 为嵌套承诺调用编写mocha测试,javascript,promise,Javascript,Promise,我有如下嵌套的承诺调用结构: validateUser() .then(() => { getUserInformation() .then((userInformation) => { Promise.all([ getUserDebitAccounts(userInformation), getUserCreditAccounts(userInformation) ]) .then(([drAcc, crAcc])
validateUser()
.then(() => {
getUserInformation()
.then((userInformation) => {
Promise.all([
getUserDebitAccounts(userInformation),
getUserCreditAccounts(userInformation)
])
.then(([drAcc, crAcc]) => {
//do something
})
})
})
.catch(error => {
callback(error);
});
首先,有没有办法简化这些嵌套调用?正如您所看到的,它们是按照依赖关系构建的。这是我提出的最符合逻辑的方法
第二,我可以在末尾使用catch
来捕获上述所有调用中的所有拒绝。我是否必须为每个呼叫添加单独的捕获
第三,我想写一个摩卡测试,我必须为这些方法做什么样的承诺嘲弄,一些提纲会很有帮助
有什么建议吗?有。要做到这一点,您需要先从调用,然后再从回调调用,无论如何,您都需要这样做,以使单个catch
在最后工作
return validateUser()
.then(getUserInformation)
.then(userInformation =>
Promise.all([
getUserDebitAccounts(userInformation),
getUserCreditAccounts(userInformation)
])
).then(([drAcc, crAcc]) => {
// do something
return …;
})
.catch(error => {
console.error(error);
});
您可以通过返回承诺来拉平承诺链,请参见此处:似乎我们可以在中组合前两个调用。所有调用都是独立的。所以只想检查一下Promise.all([validateUser(),getUserInformation()])。然后([,userInformation])=>{…})。然后(..).catch(..)
也将是放置调用的正确方式。是的,如果它们是独立的,您可以这样做。但是,看起来您可能希望在获取有关用户的任何信息之前验证用户。(如果是这样的话,我建议不要依赖副作用,而是在它们之间显式传递一个validatedUser
对象)我们是否需要在前两个调用中添加返回-@αƞjiβ是的,您应该这样做。在箭头函数速记中,它是隐式的。