2016-03-26 4 views
1

Ich bin auf der Suche nach einem schnellen Weg, um ein Versprechen mit einer Erfüllung zurückzugeben, ohne ein neues Versprechen zu erstellen.Rückgabe neuer Versprechen mit statischer Funktion

Gibt es eine statische Art und Weise zu tun, was ich am Punkt A zu tun (siehe unten)

new Promise(function(resolve){ 
    resolve(data1, data2); 
}) 
.then(function(data1, data2){ 
    if(something){ 
     // returns promise 
    } 
    else{ 
     // POINT A 
     return new Promise(function(fulfill){ 
      fulfill(data1, data2); 
     });  
    } 
}) 
.then(function(data){ 
    console.log(data); 
}); 

Idealerweise so etwas wie return Promise.fulfill(data1, data2);, die mich vom Schreiben eine Funktion speichern werden, die eine Funktion aufruft.

+0

Gewünschte Implementierung der statischen Funktion: 'Promise.fullfill = Funktion (data1, data2, ...) {return new Versprechen (function (fulfill) {fulfill (data1, data2, ...);}); } ' – Andy

+0

Nur gesagt, innerhalb eines' then' Callbacks müssen Sie überhaupt keine Versprechungen erstellen, Sie können einfach auch einen einfachen Wert zurückgeben. – Bergi

Antwort

3

Sie suchen Promise.resolve(data):

Die Promise.resolve(value) Methode gibt ein Versprechen Objekt, das mit dem angegebenen Wert aufgelöst wird. Wenn der Wert ein thenable ist (d. H. Hat eine then-Methode), wird das zurückgegebene Versprechen diesem dann "folgen" und seinen eventuellen Zustand annehmen; Andernfalls wird das zurückgegebene Versprechen mit dem Wert erfüllt.

Sie können immer nur einen einzelnen Wert btw übergeben (Ihr Beispiel würde nicht funktionieren).

+0

Danke für den Kommentar, ich werde das überprüfen. Bei der Konstruktion können Sie jedoch mehrere Parameter übergeben, weshalb eine schnellere statische Methode nicht möglich ist. – Andy

+1

* "Bei der Konstruktion können Sie jedoch mehrere Parameter übergeben" * Nein, Sie können nicht. 'resolve' benötigt nur ein Argument. Ein Versprechen repräsentiert einen * einzigen * zukünftigen Wert. Natürlich könnte dieser Wert ein Array sein. –

+0

Oos du bist richtig, vielen Dank, ich werde auf ein Array/Objekt zurückgreifen. – Andy

0

Keine Notwendigkeit für return Promise.resolve(x) innerhalb einer .then Funktion. Es ist implizit. Nur return x!