2016-06-06 3 views
3
blockieren den Zugriff auf

Ich habe eine $http Anfrage, die von einem Erfolg und Fehlerfunktion gehandhabt wird, und es ist etwas, das ich mit der Antwort in beiden Fällen tun möchte:

$http(params) 
    .then(success, error); 

var success = function(response) { 
    // do stuff 
    foo(response); 
} 
var error = function(response) { 
    // do other stuff 
    foo(response); 
} 

Ich würde es vorziehen, den Code in beiden Handlern nicht zu wiederholen, und ich dachte, ich könnte finally verwenden, um dieses Problem zu lösen, aber es scheint, dass die finally Funktion keine Argumente erhält.

Bin ich stecken foo(response) von der success und der error Funktion fest? Oder gibt es einen besseren Weg? (Bitte sagen, es gibt einen besseren Weg, ...)

Antwort

3

Was können Sie tun, ist das Scheitern in Erfolg umwandeln:

$http(params) 
    .then(success, error) 
    .then(foo); 

var success = function(response) { 
    // do stuff 
    return response; 
} 
var error = function(response) { 
    // do other stuff 
    return response; 
} 
2

finally Rückruf mit no arguments aufgerufen wird. The manual vernünftig erklärt dies:

schließlich (Rückruf, notifyCallback) - ermöglicht es Ihnen, entweder die Erfüllung oder Ablehnung eines Versprechen zu beobachten, aber so zu tun, ohne den Endwert zu ändern.

Dieses Verhalten entspricht mit anderen Versprechen Implementierungen (insbesondere Q, die die Inspiration für $q war).

Das Muster für Ergebnisverarbeitung

$http(...) 
.catch(function (err) { 
    // condition err response 
    return err; 
}) 
.then(function (result) { 
    // ... 
}); 

Dies ist nicht das gleiche wie finally, weil diese Kette ergibt erfüllt Versprechen (es sei denn, die Ablehnung erfolgte in then), während finally nicht beeinflusst werden kann Kettenzustand (außer die Ablehnung erfolgte in finally).

+0

dieser Teil half mir: "endlich keinen Einfluss auf den Kettenzustand", danke – bob

Verwandte Themen