【发布时间】:2020-05-06 23:44:25
【问题描述】:
所以在第一个例子中,链一直执行到最后一个console.log,没有错误,但在第二个例子中,类似的,它确实出错了。为什么会发生这种情况,我能否以某种方式使第一个示例也引发错误?
我只知道它与向对象添加函数有关,因为如果 test 未定义,则链会中断,但我不明白如何访问对象中不存在的键不会导致错误。
编辑:我刚刚意识到我的脑残。自然访问test.something 会返回undefined 而不是错误。
// EXAMPLE 1: Weird
var test = {};
test.f1 = function(result) {
return new Promise(function(resolve, reject) {
console.log("result", result);
resolve(1)
});
}
test.f2 = function(result) {
return new Promise(function(resolve, reject) {
console.log("result", result);
resolve(2)
});
}
test.f3 = function(result) {
return new Promise(function(resolve, reject) {
console.log("result", result);
resolve(3)
});
}
test.f4 = function(result) {
console.log("result", result);
}
test.f1(1)
.then(test.f2)
.then(test.f3)
.then(test.shouldCauseError)
.then(test.f4)
// EXAMPLE 2: As expected
new Promise(function(resolve, reject) {
resolve(1);
})
.then(function(result) {
return new Promise(function(resolve, reject) {
resolve(2)
});
})
.then(function(result) {
return new Promise(function(resolve, reject) {
resolve(3)
});
})
.then(shouldCauseError)
.then(function(result) {
console.log("result:", result);
});
【问题讨论】:
-
如果您将函数以外的任何内容传递给 .then,它会被忽略 - 原因是 .then 可以期待 onResolved 和 onRejected 回调,因此,将函数以外的其他内容传递给onresolved 被忽略...这是如何指定 promise/A+ 规范的,因为(原始)规范中没有
.catch....catch(fn)只是.then(null, fn)
标签: javascript