17

我在一系列可能会或可能不会做某事的承诺中拥有一个功能。例如

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

where getYear, party, 和sleep所有返回的承诺。有没有更简洁的方法来编写 else 语句?也就是说,什么都不做,但仍然返回一个可链接的承诺?

4

1 回答 1

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)
于 2013-05-25T00:13:03.350 回答