2016-08-05 12 views
-2

Ich habe einige Code, Angular Versprechen wie diesesMigrate veraltet Versprechen Behandlungscode

somethingThatReturnsAPromise 
    .then(function (data) { 
    // handle success 
    }) 
    .catch(function (error) { 
    // handle error 
    }) 
    .finally(function() { 
    // always do this 
    }); 

ich diese Syntax verstehen Griffe ist veraltet, und dieser Code sollte mit

somethingThatReturnsAPromise.then(
    function (data) { 
    // handle success 
    }, 
    function (error) { 
    // handle error 
    } 
); 

Aber wo ersetzt werden sollte ich den Code, der zuvor in finally war, mit dieser neuen Syntax, dh Code, der ausgeführt wird, wenn das Versprechen gelöst (erfolgreich) und abgelehnt (fehlgeschlagen)?

+0

Wo hast du das gehört? –

+1

Ich wäre überrascht, wenn Catch und schließlich veraltet waren – zoom

+0

Dennoch catch (f) = dann (null, f) und schließlich (f) = dann (f, f) – zoom

Antwort

0

Wenn Sie mit then entweder Weg gehen möchten, können Sie einen Handler für beide Erfolg und Fehler Versprechen Handler bieten:

function always() { 
    // Do whatever either it fails or succeeds 
} 

somethingThatReturnsAPromise.then(always, always).then(function(data) { 

}, function(error) { 

}); 
0

ersten: ich nichts über jede (Versprechen bezogen) Methode gefunden in der official docs veraltet sein.

2: finally ist viel komplizierter als eine then(cb, cb), da es keine Fehler abfängt und die Ergebnisse Ihres Callbacks nicht weitergibt, aber wenn Sie ein Versprechen zurückgeben, wartet es auf dieses Versprechen, bis es aufgelöst wird fährt fort, den aktuellen Wert zu propagieren.

Sth wie folgt aus:

function _finally(promise, callback) { 
    var handleValue = isError => value => $q((resolve, reject) => { 
     //call your callback 
     //if this throws, propagate the Error 
     var w = typeof callback === "function" && callback(); 

     //prepare to push the current value/error 
     var fn = isError? 
      () => reject(value): 
      () => resolve(value); 

     //check wether your callback has returned sth. Promise-like 
     if(w && typeof w.then === "function"){ 
      //then we'll wait for this to resolve, 
      //before we continue propagating the current value/error 
      w.then(fn, fn); 
     }else{ 
      //otherwise propagate the current value/error emmediately 
      fn(); 
     } 
    }); 

    return $q.resolve(promise).then(
     handleValue(false), 
     handleValue(true) 
    ); 
} 

Ich schrieb diesen Code nur Ihnen eine implession zu geben, was finally tut. Angulars Implementierung ist reibungsloser, also bleiben Sie dabei. Ich sehe keinen Grund zu der Annahme, dass catch oder finally veraltet sind oder jemals sein werden.