Promise 异常处理和 try/catch 做与我期望相反的事情
Promise exception handling and try/catch doing the opposite of what I would expect
假设我有以下功能
async function test() {
return new Promise<string>((reject, resolve) => {
resolve("test OK");
});
}
async function test2() {
return new Promise<string>((reject, resolve) => {
reject("test error");
});
}
async function f() {
try {
await test();
} catch (err) {
console.log("error test 1");
}
}
async function f2() {
try {
await test2();
} catch (err) {
console.log("error test 2");
}
}
f(); //This prints 'error test 1'
f2(); //This prints nothing
我的假设(显然不正确)是在 test()
返回的承诺中调用 resolve
会导致 f()
无问题地执行,相反,调用 reject
in test2()
会导致 f2()
的 catch 块执行。然而,恰恰相反。关于为什么调用 resolve()
导致错误被捕获,我的根本误解是什么?
问题是 resolve
和 reject
应该颠倒过来。 Promise 构造函数的参数取决于位置而不是名称,因此名称并不代表您所期望的。第一个参数总是 resolve,第二个参数总是 reject。
return new Promise<string>((resolve, reject) => {
Promise 构造函数 MDN 文档供参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/Promise#creating_a_new_promise
假设我有以下功能
async function test() {
return new Promise<string>((reject, resolve) => {
resolve("test OK");
});
}
async function test2() {
return new Promise<string>((reject, resolve) => {
reject("test error");
});
}
async function f() {
try {
await test();
} catch (err) {
console.log("error test 1");
}
}
async function f2() {
try {
await test2();
} catch (err) {
console.log("error test 2");
}
}
f(); //This prints 'error test 1'
f2(); //This prints nothing
我的假设(显然不正确)是在 test()
返回的承诺中调用 resolve
会导致 f()
无问题地执行,相反,调用 reject
in test2()
会导致 f2()
的 catch 块执行。然而,恰恰相反。关于为什么调用 resolve()
导致错误被捕获,我的根本误解是什么?
问题是 resolve
和 reject
应该颠倒过来。 Promise 构造函数的参数取决于位置而不是名称,因此名称并不代表您所期望的。第一个参数总是 resolve,第二个参数总是 reject。
return new Promise<string>((resolve, reject) => {
Promise 构造函数 MDN 文档供参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/Promise#creating_a_new_promise