2017-09-08 3 views
0

Bis jetzt für mich war das Konzept eines Node Worker eines der Dinge, die interessant klingt und ich werde über einen Tag herausfinden.Wie Node Worker in Wakanda zu verwenden ist

Nun, dieser Tag ist gekommen und ich bitte um Hilfe.

Ich muss einen Web-Service aufrufen und dann die zurückgegebenen Daten verarbeiten. Ich kann den Service mit einem XMLHttpRequest aufrufen, aber dann muss ich nützliche Daten daraus machen.

Es gibt ein nettes Knotenmodul, das beide den Dienst aufruft und die Daten in einer nützlichen Form mit einem Aufruf zurückgibt.

Ich kann Node Worker (in Wakanda) einrichten, um dies zu tun und zu überprüfen, dass es funktioniert.

Mein Problem ist die Behandlung des asynchronen Anrufs im Proxy.

Der Aufruf der Knotenmodul wie folgt aussieht: so etwas wie dieses

myModule.getData(param, (err, data) => { 
 
    // data is an object containing everything I want. 
 
    // if I get data I want to return it to the proxy 
 
    // if I get an err I want to return the error to the proxy 
 
});

So sieht mein Wrapper-Code:

function doSomething(param){ 
 

 
    // call proxy with param 
 
    // wait for result 
 
    // return result 
 
    
 
}

Das klingt alles nach etwas, das ich wissen sollte. Ich denke jedoch, dass ich mit zu vielen neuen Dingen zu kämpfen habe und mich völlig verwirrt habe.

PS: Ich habe Threyify versucht, aber konnte nicht herausfinden, wie man den Arbeiter dazu bringt, den Fehler zurückzugeben, den er erhalten hat.

Ich würde wirklich jede Hilfe oder Hinweise hier schätzen.

Antwort

2

Wenn ich Ihr Problem richtig verstehe, können Sie keinen Wert von einer Funktion zurückgeben, nachdem ein asynchroner Aufruf abgeschlossen wurde. Sie müssen die Daten im myModule.getData-Callback verarbeiten.

Wenn Sie lieber in einer aufrufenden Funktion (wie doSomething) umgehen möchten, können Sie ein Versprechen verwenden, um einen Wert "zurückzugeben".

function myProxy(param) { 
    return new Promise((resolve, reject) => { 
     myModule.getData(param, (err, data) => { 
      if (!err) { // or however you determine an error occurred. 
       resolve(data); // if I get data I want to return it to the proxy 
      } else { 
       reject(err); // if I get an err I want to return the error to the proxy 
      } 
     }); 
    }); 
} 

function doSomething(param){ 
    myProxy(param).then(data => { 
     // Handle the data here. 
    }).catch(err => { 
     // Handle the error here. 
    }); 
} 
+0

Ja, das sieht so aus. Danke Jeff. –

Verwandte Themen