gpt4 book ai didi

javascript - Async/Await 区分拒绝和错误

转载 作者:行者123 更新时间:2023-11-30 19:02:51 26 4
gpt4 key购买 nike

我一直在阅读有关在 Promises 中使用 async/await 而不是经典的 .then() 的信息,但仍有一些我不明白的地方.

我知道您可以将经典的 .then().catch() 替换为 async/awaittry and catch 但是将处理 exceptionsrejects 就像它们一样。

例子:

async function func1() {
return new Promise((resolve, reject) => {
//throw new Error("error");
reject("rejected");
});
}

async function func2() {
try {
const message = await func1();
console.log(message);
} catch(e) {
console.log(e);
}
}

func2();

rejectthrow new Error 都会落入 catch block 中,但 Promises 还有下一个 sintaxis:

then(funcResolve, funcReject).catch(funcCatch)async/await 处理 rejecterrors 一样。

有什么方法可以区分 async/awaiterrorreject 吗?

最佳答案

基于 Chrome 中的少量实验,看起来 promise().then(funcResolve, funcReject).catch(funcCatch) 在功能上几乎等同于

async function run() {
try {
try {
const result = await promise();
} catch(e) {
// funcReject code here
}
// funcResolve code here
} catch(e) {
// funcCatch code here
// this catches errors generated in funcReject and funcResolve
}
}

唯一的区别是,在 promise 版本中,funcResolve 不会在 funcReject 之后运行,但在我的异步代码中它会运行。

如果您绝对需要区分来自异步操作的错误和来自同步操作的错误,您仍然可以获得相同类型的结果。例如,您可以确保您的异步操作返回一个扩展 Error 的自定义类,并检查您的 catch 中的类

class AsyncError extends Error{}
// in your async code, make sure you transform all errors into AsyncErrors

try { promise() } catch(e) {
if (e instanceof AsyncError) {} else {}
}

关于javascript - Async/Await 区分拒绝和错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59326464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com