在这种情况下,如何停止承诺链? 只有当第一个条件为真时才执行第二个代码。
var p = new Promise((resolve, reject) => {
setTimeout(function() {
resolve(1)
}, 0);
});
p
.then((res) => {
if(true) {
return res + 2
} else {
// do something and break the chain here ???
}
})
.then((res) => {
// executed only when the condition is true
console.log(res)
})
答案 0 :(得分:7)
您可以在dat_readdates = cDate(var_readdates)
块中throw
Error
,然后在承诺链的末尾else
:
catch
答案 1 :(得分:0)
您可以阅读the documentation,其中包含
如果输入函数抛出错误,或者输入函数返回被拒绝的Promise,则
Promise.then
返回被拒绝的Promise。
如果您愿意,可以在关于then
的部分中阅读Promise A spec,其中promise2
指的是最终的承诺:
如果
onFulfilled
或onRejected
引发异常e
,则必须拒绝promise2
,并以e为理由。)
如果您愿意,可以阅读优秀的2ality blog:
then()
返回一个新的promise Q(通过接收者的构造函数创建): 如果任何一个反应返回一个值,Q就会被解析。 如果任何一个反应抛出异常,Q就会被拒绝。
你可以阅读精彩的YDKJS:
在then(..)调用的实现或拒绝处理程序中抛出异常会导致下一个(链式)承诺立即被该异常拒绝。
答案 2 :(得分:0)
您可以将链移动到条件分支中:
p.then((res) => {
if(true) {
return Promise.resolve(res + 2).then((res) => {
// executed only when the condition is true
});
} else {
// do something
// chain ends here
}
});
答案 3 :(得分:-6)
只需使用以下内容:拒绝('拒绝') 在第一个任务的其他方面。
P
.then((res) => {
if(true) {
return res + 2
} else {
reject('rejected due to logic failure' }
})
.then((res) => {
// executed only when the condition is true
console.log(res)
})
或者你也可以使用.catch()为你的第一个任务添加一个catch部分 希望这会有所帮助。