Vraag Maak een lege belofte


Ik heb een functie in een keten van beloftes die wel of niet iets kunnen doen. Bijv.

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

Waar getYear, party, en sleep alle beloften. Is er een meer beknopte manier om de else-verklaring te schrijven? Dat wil zeggen, niets doen, maar toch een ketenbare belofte teruggeven?


17
2018-05-24 23:03


oorsprong


antwoorden:


Ja. Q(value) geeft een belofte terug voor de value (het vouwt ook de waarde uit als value het is een belofte).

  getYear().then(function(results){
    if(results.is1999) return party();
    else return Q(undefined);
  }).then(sleep)

Je kunt ook exact dezelfde semantiek krijgen door gewoon niets te retourneren:

  getYear().then(function(results){
    if(results.is1999) return party();
  }).then(sleep)

Als wat je wilde een belofte was die nooit is opgelost, zou je beste gok zijn

  getYear().then(function(results){
    if(results.is1999) return party();
    else return Q.promise(function () {});
  }).then(sleep)

Wat je zou kunnen doen is dezelfde belofte hergebruiken:

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

26
2018-05-25 00:13