【发布时间】:2019-02-24 08:51:08
【问题描述】:
我对这个 Promise 代码有疑问。为什么记录“Foo”?我很困惑,因为“then”紧随“catch”,而“catch”从未被调用,为什么执行会流入“then”?
let myPromise = new Promise((resolve, reject) => {
resolve("Foo");
});
myPromise.catch((value) => {
console.log('inside catch');
}).then((value) => {
console.log(value);
});
【问题讨论】:
-
catch() 只会在 promise reject() 时执行。
-
试试
throw("Baz");看看结果 -
catch() 方法返回一个 Promise 并且只处理被拒绝的情况。
-
也许我弄错了,但我觉得你的困惑来自这样一个事实,你可能认为
then只有在catch的回调被调用时才会被调用。它没有。then和catch都是同步调用的。这些方法中的每一个都返回一个新的 Promise。它们的回调被异步调用,它们的执行将取决于 Promise 链中发生的事情。 -
@Kaiido 谢谢!您的解释很有帮助!
标签: javascript ecmascript-6 es6-promise