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β是的,您应该这样做。在箭头函数速记中,它是隐式的。