function getPromise() {
return new Promise((resolve, reject) => {
setTimeout(reject, 2000, new Error('fail'));
});
}
const promise1 = getPromise();
promise1.catch(() => {
// NOP
});
promise1
.then(() => console.log('then promise1'))
.catch(() => console.error('catch promise1'));
const promise2 = getPromise().catch(() => {
// NOP
});
promise2
.then(() => console.log('then promise2'))
.catch(() => console.error('catch promise2'));
输出
catch promise1
then promise2
说明
此处 promise2
的处理方式与 promise1
不同。 promise1
将因“失败”错误而被拒绝,而 promise2
将以 undefined
解决。
我的环境
Ubuntu 14.04,Node.js 10.1.0
问题
我认为这种行为并不明显。为什么代码会这样工作?
最佳答案
因为您不是将第二个链接到拒绝 promise ,而是链接到 catch
返回的 promise ,它将解析为您从 catch
处理程序返回的任何内容。
Promise(promise1)
-❎-> catch
-✔-> then -❎- > catch
-❎-----------------^
Promise
-❎-> catch(promise2)
-✔-> then -❎-> catch
-❎-----------------^
-✔------------^
在第一种情况下,promise 拒绝,所以它会进入直接分配给它的 catch
,它会跳过 then
,直接进入链式 捕捉
。在第二种情况下,promise 被拒绝并且 catch
将被执行,但随后它似乎处理了错误,因此链式 then
将被调用。如果你不想这样,catch
必须重新throw
错误,然后 then
将被跳过,它也进入链式捕捉
。
关于javascript - promise 链接 : Adding an error handler when creating a Promise vs adding to a variable with a promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51349921/