在 NodeJS 中转义多个嵌套函数
Escape multiple nested functions in NodeJS
我在 Javascript 中有这样的代码:
function someFunction() {
// Code
somePromise().catch(err => {
console.log(err);
});
// Mode Code
}
如果 somePromise()
被拒绝,我想转义 somePromise().catch
和 someFunction()
。我尝试使用 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 是一种存储延续的机制。您传递给 then
和 catch
的函数存储在承诺中,并在解决承诺时执行。
要在没有 async
/await
的情况下解决这个问题,您只需 return Promise 并使用 then
执行任何应该在 Promise 不执行时执行的代码拒绝:
function someFunction() {
// Code
return somePromise()
.then(result => {
// More Code
})
.catch(err => {
console.log(err);
});
}
这就是 async
/await
脱糖的本质。 Async/await 是围绕状态机的语法糖,可为您连接这些延续。
我在 Javascript 中有这样的代码:
function someFunction() {
// Code
somePromise().catch(err => {
console.log(err);
});
// Mode Code
}
如果 somePromise()
被拒绝,我想转义 somePromise().catch
和 someFunction()
。我尝试使用 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 是一种存储延续的机制。您传递给 then
和 catch
的函数存储在承诺中,并在解决承诺时执行。
要在没有 async
/await
的情况下解决这个问题,您只需 return Promise 并使用 then
执行任何应该在 Promise 不执行时执行的代码拒绝:
function someFunction() {
// Code
return somePromise()
.then(result => {
// More Code
})
.catch(err => {
console.log(err);
});
}
这就是 async
/await
脱糖的本质。 Async/await 是围绕状态机的语法糖,可为您连接这些延续。