Ich habe einige JavaSript Code, der ein bestehendes Versprechen nimmt (zum Beispiel das Versprechen zurück durch holen()) und einen Mehrwert (sagen wir, dann/catch Hörer für das Debuggen, oder vielleicht mehr):Nach dem Hinzufügen eines Zuhörers zu einem Versprechen, sollte ich das ursprüngliche Versprechen oder das neue Versprechen verwenden?
let myFetch = function(url) {
return fetch(url).then(function(value) {
console.log("fetch succeeded: value=",value);
return value;
}.catch(function(reason) {
console.log("fetch failed: reason=",reason);
throw reason;
});
};
ich fand mich den obigen Code zu modifizieren, so dass die Zuhörer nur hinzugefügt werden, wenn eine bestimmte Bedingung erfüllt ist:
let myFetch = function(url) {
let promise = fetch(url);
if (some condition) {
promise = promise.then(function(value) {
console.log("fetch succeeded: value=",value);
return value;
}.catch(function(reason) {
console.log("fetch failed: reason=",reason);
throw reason;
});
}
return promise;
};
Jetzt frage ich mich, ist es wirklich sinnvoll für myFetch das neue Versprechen zurückgeführt, indem zurückzukehren „dann“ (eigentlich fangen, die Abkürzung für anot ist ihr "dann") wie oben, oder würde es mehr Sinn machen, das ursprüngliche Versprechen (mit den hinzugefügten Zuhörern) zurückzugeben? Mit anderen Worten, ich denke, das zweite „Versprechen =“ wegzulassen, so dass der Code wie dieser Stelle aussehen:
let myFetch = function(url) {
let promise = fetch(url);
if (some condition) {
promise.then(function(value) {
console.log("fetch succeeded: value=",value);
return value;
}.catch(function(reason) {
console.log("fetch failed: reason=",reason);
throw reason;
});
}
return promise;
};
Ist das effektiv unterscheidet sich von der vorherigen Version? Ist eine der beiden Versionen vorzuziehen, und wenn ja, warum?
mögliche Duplikate von [Kann ich ein Versprechen schießen und vergessen?] (Http://StackOverflow.com/q/32384449/1048572) (die async verwendet/erwarten, aber das Problem ist das gleiche). – Bergi