Lösung verspricht von ES6 Pfeil-Funktionen
Lesen der docs wie ich es verstehe, in ES6 Sinne von:
foo => someFun(foo);
ist äquivalent zu:
foo => { return someFun(foo); }
Ich fahre ein neues Versprechen, und in diesem code mit den Pfeiltasten Funktionen aufrufen, die zu beheben & ablehnen Methoden, z.B.
return new Promise(function(resolve, reject)
{
someFunThatReturnsAPromise()
.then(data => resolve(data))
.catch(err => reject(err));
});
Als solche ist Sie den code in das dann eigentlich,
.then(data => return resolve(data))
Wenn dem so ist, ist es wichtig, dass das Ergebnis der Entschlossenheit " (von denen ich nicht sicher bin ob der Typ des Wertes) und sollte ich stattdessen etwas weniger knapp und schreiben Sie es mit {} um zu verhindern, dass die implizite Rendite
.then(data => { resolve(data); })
Ein paar Kommentare haben erklärt genau, dass die innere Versprechen ist nicht erforderlich. Als solche, beachten Sie bitte die ursprüngliche Frage, aber mit der dann geändert werden ".dann(Daten => resolve(data.item))", d.h. die Durchführung einige zusätzliche (wenngleich geringen) Verarbeitung
In jedem Fall vermeiden, die
In jedem Fall vermeiden, die
Promise
Konstruktor antipattern und don ' T pass resolve
/reject
als callbacks, um ein Versprechen an alle!InformationsquelleAutor const | 2017-10-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
resolve
Funktion bereits gibtundefined
ist, so macht es absolut keinen Unterschied, ob Sie implizit senden Sie es mit eine eine-Zeile-Pfeil-Funktion, oder geben Sie es nicht zurück von einer Funktion Körper überhaupt (denn die letztere bedeutet, dass Ihre Funktion Körper implizit zurückundefined
selbst).Darüber hinaus, da Sie umwickelt habe das Versprechen zurückgegeben
someFunThatReturnsAPromise()
in einem neuen Versprechen, es gibt nichts, dass Griffe die Rücksendung sowieso, so würde es keinen Unterschied machen, auch wenn Tat etwas zurückgeben.Mehr wichtiger ist, die Art und Weise, die Sie umwickelt habe ein Versprechen, ein neues Versprechen, ist ein anti-pattern. Die
new Promise()
- Konstrukt wird nur für den Umgang mit asynchronen Prozessen, die noch nicht Versprechen basiert.Da
someFunThatReturnsAPromise()
bereits zurück ein Versprechen, die Sie nicht brauchen, wickeln Sie es in eine neue, verwenden Sie einfach die, die Sie bekam!Zu deinem Beispiel, würde einfach bedeuten, dass er es wieder:
Wenn Sie wollen, um einige der Verarbeitung der Daten, wie Sie nur die Rückgabe eines Teils der Daten (die
status
Eigenschaft in dem Beispiel weiter unten), tun Sie das in einemthen
callback:Zurückkehren, wenn Sie in einer
then
callback, wird er wiederum zurückkehren, ein neues Versprechen, dass aufgelöst wird und die Daten zurückgegeben werden (es sei denn, man kehrte ein weiteres Versprechen, in dem Fall wird es lösen, wenn das Versprechen aufgelöst wird).Dies ist, wie Sie verspricht, die entworfen sind, durch die Verkettung der asynchrone Prozesse und Ihre Ergebnisse.
InformationsquelleAutor Lennholm
Wenn Sie nur wollen, um die Daten, und ablehnen, sofern der Fehler dann brauchen Sie nicht ein, dann()
wäre äquivalent zu
es sei denn, Sie möchten etwas tun Verarbeitung auf Daten
return new Promise ( (reslove, reject) = > { ... } )
someFunThatReturnsAPromise() gibt bereits ein Versprechen, warum würden Sie wollen, wickeln Sie es in ein anderes Versprechen ?
Das ist eine berechtigte Frage. Im Beispiel-code es ist nicht unbedingt erforderlich. Vielleicht würde das Beispiel noch ein wenig besser, wenn die dann Linie war: .dann(Daten => resolve(data.item)) sagen
es sei denn, Sie wollen, um einige multi-line-Verarbeitung werden dann beide gleichwertig sind.
someFunThatReturnsAPromise().dann(Daten => Daten.Punkt)
InformationsquelleAutor marvel308