【发布时间】:2018-09-26 08:12:17
【问题描述】:
在下面的代码中,链接到 addTwo 函数的第一个 .then() 调用了拒绝方法,因为我正在检查 a 和 b 的类型是否为“choco”,这是不可能的。
我希望输出停止在“我们有一个错误老板”而不继续,因为拒绝方法与解决方法不同,没有“返回 addTwo”语句。
但输出显示代码继续执行下一个 then 调用,输出为“第二次加法的答案:未定义”。为什么代码不只是在第一次 then 调用时停止,因为拒绝方法不返回 Promise?
var addTwo = (a, b) => {
return new Promise((resolve, reject) => {
if(typeof a === choco && typeof b === choco){
resolve(a + b)
}else{
reject("a or b or both were not numbers")
}
})
}
addTwo(5, 6).then((res) => {
console.log("Answer of addition: " + res)
return addTwo(res, 100)
}, (err) => {
console.log("We have an error boss: " + err)
}).then((res) => {
console.log("Answer of second addition: " + res)
}, (err) => {
console.log("We have an error boss: " + err)
})
【问题讨论】:
-
将第二个参数传递给
a.then(...)意味着:“如果a被拒绝,则调用该函数并返回(成功)解决的承诺,如果没有抛出错误” .所以它完全按照设计工作。如果这不是您想要的行为,那么您不应该将第二个参数传递给.then。 -
“为什么代码不只是在第一次 then 调用时停止,因为拒绝方法不返回 Promise?” 你的意思是
reject?resolve和reject都不返回承诺。new Promise和.then总是 返回一个承诺。一个promise可以处于三种不同的状态:“待定”,如果resolve和reject都没有被调用,“已完成”如果resolve被调用,或者“被拒绝”如果reject被调用。你通过.then注册的函数在promise进入特定状态时被调用。这些函数中发生的事情决定了.then返回的承诺的状态。
标签: javascript node.js web es6-promise