javascript - 无法理解为什么此代码会产生此输出
问题描述
我正在网上做一个反应课程。在函数链接主题之后,有一个 mcq 来预测输出。代码是:
function job() {
return new Promise(function(resolve, reject) {
reject();
});
}
let promise = job();
promise
.then(function() {
console.log('Success 1');
})
.then(function() {
console.log('Success 2');
})
.then(function() {
console.log('Success 3');
})
.catch(function() {
console.log('Error 1');
})
.then(function() {
console.log('Success 4');
});
但是为什么这段代码会Error 1,Success 4
作为输出产生呢?
解决方案
.catch
将导致将已解决的 Promise 传递给链的下一步 - 除非.catch
处理程序本身抛出。也就是说,给定任何:
.catch(someCallback)
.then(someFn);
除非someCallback
抛出错误(这将导致被拒绝的 Promise,这可能会被.catch
进一步调用),否则无论情况如何,someFn
都将始终运行。
这是许多人选择将.catch
s 放在 Promise 链末尾的原因之一——它使控制流更容易理解。
推荐阅读
- python - Kivy 解决 Py 和 Kivy 之间的逻辑问题
- c# - 为什么无法通过 OpenXML 获取 excel 文件的单元格值?
- java - SQL Server 插入一个特殊字符串(右侧的空格)并超出列大小。为什么不报错?
- visual-studio-code - 转到实现或转到定义不适用于 Jsx 的 VS CODE
- c# - EF Core:在相关的一对多实体中查询多层次数据的正确方法
- python-3.x - 尝试搜索不同类型的定义 api discord py
- barcode-scanner - 扫描条码和控制led
- python - 可变对象在 Python 中的真正含义
- javascript - javascript 计时器在最后 3 秒内播放声音的问题
- java - 如何轻松地为java中的许多方法制作自定义事件?