2017-09-06 3 views
1

Ich habe versucht, einen Event-Emitter mit ES6 verspricht, aber wenn die gespeicherte Antwort das zweite Mal aufgerufen wird, gibt es nichts zurück.Speichern Versprechen Auflösung Funktion

var z; 
function test(){ 
    return new Promise((resolve) => { 
     z = resolve; 
    }); 
} 

test().then(()=> console.log('aaaaaaaaaaaaaaaaaaaaaaaa')) 

console.log(z) // ƒ() { [native code] } 
z(); // aaaaaaaaaaaaaaaaaaaaaaaa 
z(); // <empty> 
+0

Es liegt in der Natur von Versprechen, dass sie nur einen einzigen Wert enthalten. Ein Versprechen kann nur einmal gelöst werden. – PeterMader

Antwort

2

wenn die gespeicherte Antwort zum zweiten Mal aufgerufen wird

Promises nur einmal abgerechnet werden. Sobald ein Versprechen erfüllt ist (gelöst oder abgelehnt), ist es das; sein Zustand ändert sich nie wieder. Nachfolgende Aufrufe an die Funktionen resolve und reject, die an den Promore-Executor übergeben werden, werden ignoriert. (Einige würden bevorzugen, dass sie werfen, aber sie nicht.)

Wenn Sie einen Ereignissender wollen, ist ein Versprechen nur die falsche Technologie, da Ereignisse mehr als einmal passieren können.

Verwandte Themen