Подтвердить что ты не робот

Создать пустое обещание

У меня есть функция в цепочке promises, которая может или не может что-то сделать. Например.

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

Где getYear, party и sleep все возвращаются promises. Есть ли более сжатый способ написать инструкцию else? То есть, ничего не делайте, но все же возвращайте цепное обещание?

4b9b3361

Ответ 1

Да. 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)