2016-06-03 11 views
0

Also muss ich einen einfachen booleschen Wert an eine Bibliothek übergeben. Um den Wert zu erhalten, muss ich die Auflösung eines Versprechens bewerten (es macht einen asynchronen Aufruf). Also habe ich etwas in der Art:Rückgabe eines Ergebnisses aus einer Funktion, nachdem ein Versprechen verrechnet

import {funcThatReturnsPromise} from 'some-module'; 

function someFunc(someParam) { 
    funcThatReturnsPromise(someParam).then(theResult => someOtherFunc(theResult)); 
} 

function someOtherFunc(someParam) { 
    .... 
    return true; // do some things and return a bool 
} 

Das Problem ist, dass dies ein Versprechen, nicht die bool zurückgibt. Ich kann nicht (ohne das Forken eines Drittanbieterprojekts) den aufrufenden Code modifizieren, um ein Versprechen statt eines bool zu bearbeiten. Ich weiß, dass der ganze Sinn von Versprechen darin besteht, asynchrone Aufrufe ohne Verschachtelung verarbeiten zu können, aber in diesem Fall muss ich die Dinge synchron handhaben. Ich bin mir nicht sicher, wie ich das machen soll. Ich habe die Dokumente durchgesehen, aber ich sehe keinen Weg, dies zu tun. Kann mir hier jemand in die richtige Richtung zeigen?

+1

Ein bisschen verwirrt. Sie möchten, dass Ihr asynchroner Aufruf synchron ausgeführt wird? – lux

Antwort

1

Der Umgang mit Versprechen und asynchronem Code kann verwirrend sein, aber der Schlüssel ist, ihn nicht zu komplizieren. Versuchen Sie nicht, das Rad neu zu erfinden, versuchen Sie zu verstehen, wo Ihr Code in diese Struktur gehört.

Wenn ein Codeabschnitt nach der Auflösung des Versprechens ausgeführt werden soll, gehört er in den Rückruf .then. Es klingt, als ob Sie die Hälfte Ihres Codes und die Hälfte Ihres Codes aus diesem Rückruf heraus haben.

Erweitern Sie Ihren Code ein wenig, ich nehme an, Sie versuchen, etwas zu tun mit dem Effekt;

function someFunc(someParam) { 
    funcThatReturnsPromise(someParam).then(theResult => someOtherFunc(theResult)); 

    if(someOtherFunc(theResult)){ 
     alert('A RESULT!'); 
    } 
} 

function someOtherFunc(someParam) { 
    .... 
    return true; 
} 

Aber was Sie tun sollten, ist;

function someFunc(someParam) { 
    funcThatReturnsPromise(someParam).then(theResult => { 
     funcResult = someOtherFunc(theResult) 
     if(funcResult){ 
      alert('A RESULT!') 
     } 
    }); 

} 

function someOtherFunc(someParam) { 
    .... 
    return true; 
} 
Verwandte Themen