node.js - promise可以中途终止函数链吗?
本文介绍了node.js - promise可以中途终止函数链吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
我使用q.js来处理异步调用的问题情况。可能是我对promise的理解不到位,对于reject()的情况我一直觉得处理起来很别扭。先来看下我的处理方式,有不妥之处,欢迎予以指出。
代码如下:
var Q = require('q');
Q.fcall(function(){
return 2;
}).then(function(v){//f1
var deferred = Q.defer();
if(v == 1)
deferred.resolve("resolve");
else
deferred.reject("reject");
return deferred.promise;
}).then(function(){//f2
console.log("f2 resolve");
},function(){
console.log("f2 reject");
//如果上一函数是reject走到这里,由于函数已报错,我不希望再执行f3函数,这里改怎么写能不让f3执行呢?
//正常的话,f3函数是会执行的
}).then(function(){//f3
console.log('end');
});
f1函数执行结果返回了reject的状态,走到了f2的fail函数里了,在这里能阻止再执行f3函数吗?
如果朋友们有好的方式来处理reject的情况,可以show出代码让我学习学习啊。先表示感谢!
解决方案
在第 2 个 then 的第二个函数里加一句 throw 0
试试。当然 throw 的东西你可以自己定。
function(){
console.log("f2 reject");
return Q.reject(); // 加上这句试试
// throw 0; // 或者这句
//如果上一函数是reject走到这里,由于函数已报错,我不希望再执行f3函数,这里改怎么写能不让f3执行呢?
//正常的话,f3函数是会执行的
}
一般情况下,会在最后加 reject 检查,比如
q.then(fSuccess).then(fSuccess2).fail(fFail);
如果第 1 个失败,第 2 个会被跳过的。
这篇关于node.js - promise可以中途终止函数链吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文