2016-04-01 14 views
0

suppose:, wie Kette javascript verspricht und Fehler

function f() { 
    return p1() 
    .then(function(p1res) { 
     console.log('p1 ok'); 
     return Promise.resolve(p1res); 
    }, function(err) { 
     console.log('p1 err '+err); 
     return Promise.reject(err); 

    }).then(... proceed 

sind die Aussagen

return Promise.resolve(p1res); 

und

return Promise.reject(err); 

benötigt?

Antwort

1

Werden die Anweisungen return Promise.resolve(p1res); und return Promise.reject(err); benötigt?

Ja, das ist oder etwas Gleichwertiges benötigt wenn Sie Kette zusätzliche then Handler aus diesen Handler planen und daher erhalten müssen („pass through“), um den Wert und den Status des Versprechens. Doch selbst wenn es wollen Sie das tun:

  1. Statt return Promise.resolve(p1res); es wäre einfacher und entspricht nur sagen return p1res;.

  2. Statt return Promise.reject(err); wäre es einfacher und gleichwertig sein, nur throw err; zu sagen, das Versprechen auf dem Fehlerpfad mit dem „Grund“ err fortzusetzen.

Allerdings, wenn Ihr Ziel lediglich ist ein Handler den Status anmelden, brauchen Sie nicht zu, und wollen wahrscheinlich nicht zu, Kette nachfolgende Handler von dort, denn das wird von Ihnen verlangen, um zu gehen zusätzliche Probleme, um sicherzustellen, dass die Statusberichtshandler den Wert zurückgeben oder den Fehler erneut zugunsten der nachgeschalteten Handler ausgeben. Stattdessen können Sie den Statusberichtshandler in eine separate "Verzweigung" setzen und sich nicht darum kümmern, was er zurückgibt oder weitergibt:

function f() { 
    let result = p1(); 

    result . then(
     function(p1res) { console.log('p1 ok'); }, 
     function(err) { console.log('p1 err ', err); }); 

    result . then(
    ...proceed 
+0

ausgezeichnet, thx! – kofifus