创建一个空的承诺

pra*_*uss 17 node.js promise q

我在承诺链中有一个功能,可能会或可能不会做某事.例如

  getYear().then(function(results){
    if(results.is1999) return party();
    else return Q.fcall(function(){/*do nothing here*/});
  }).then(sleep)
Run Code Online (Sandbox Code Playgroud)

何处getYear,party以及sleep所有回报承诺.是否有更简洁的方式来编写else语句?也就是说,什么都不做,但仍然会回归可靠的承诺?

For*_*say 26

是. Q(value)返回一个承诺value(如果value是一个承诺,它也会释放值).

  getYear().then(function(results){
    if(results.is1999) return party();
    else return Q(undefined);
  }).then(sleep)
Run Code Online (Sandbox Code Playgroud)

或者,您可以通过不返回任何内容来获得完全相同的语义:

  getYear().then(function(results){
    if(results.is1999) return party();
  }).then(sleep)
Run Code Online (Sandbox Code Playgroud)

如果您想要的是一个永远不会解决的承诺,那么您最好的选择就是

  getYear().then(function(results){
    if(results.is1999) return party();
    else return Q.promise(function () {});
  }).then(sleep)
Run Code Online (Sandbox Code Playgroud)

你能做的就是重复使用同样的承诺:

  var stop = Q.promise(function () {});
  getYear().then(function(results){
    if(results.is1999) return party();
    else return stop
  }).then(sleep)
Run Code Online (Sandbox Code Playgroud)