在 NodeJS 中转义多个嵌套函数

Escape multiple nested functions in NodeJS

我在 Javascript 中有这样的代码:

function someFunction() {
    // Code
    somePromise().catch(err => {
        console.log(err);
    });
    // Mode Code
}

如果 somePromise() 被拒绝,我想转义 somePromise().catchsomeFunction()。我尝试使用 return,但这只允许我转义 somePromise().catch。有什么函数可以让我跳出嵌套循环吗?

您可以使用 async/await:

function async someFunction() {
    // Code
    try {
        await somePromise();
    } catch (err) {
        console.log(err);
        return; // aborts further execution
    }
    // More Code
}

详情见async function

Async/await 解决了问题,但了解它解决问题的原因很重要。

Promises 是一种存储延续的机制。您传递给 thencatch 的函数存储在承诺中,并在解决承诺时执行。

要在没有 async/await 的情况下解决这个问题,您只需 return Promise 并使用 then 执行任何应该在 Promise 不执行时执行的代码拒绝:

function someFunction() {
    // Code
    return somePromise()
      .then(result => {
        // More Code
      })
      .catch(err => {
        console.log(err);
      });
}

这就是 async/await 脱糖的本质。 Async/await 是围绕状态机的语法糖,可为您连接这些延续。