我在承诺链中有一个功能,可能会或可能不会做某事。 E.g。
getYear().then(function(results){
if(results.is1999) return party();
else return Q.fcall(function(){/*do nothing here*/});
}).then(sleep)
getYear
,party
和sleep
都返回承诺。是否有更简洁的方式来编写else语句?也就是说,什么都不做,但仍然会回归可靠的承诺?
答案 0 :(得分:26)
是。 Q(value)
会返回value
的承诺(如果value
是承诺,它也会展开值。)
getYear().then(function(results){
if(results.is1999) return party();
else return Q(undefined);
}).then(sleep)
或者,您可以通过不返回任何内容来获得完全相同的语义:
getYear().then(function(results){
if(results.is1999) return party();
}).then(sleep)
如果你想要的是一个永远不会解决的承诺,你最好的选择就是
getYear().then(function(results){
if(results.is1999) return party();
else return Q.promise(function () {});
}).then(sleep)
你能做的就是重复使用同样的承诺:
var stop = Q.promise(function () {});
getYear().then(function(results){
if(results.is1999) return party();
else return stop
}).then(sleep)