2017-09-08 23 views
0

到目前为止,对于我来说,Node Worker的概念就是那些听起来很有趣的事情之一,而且我会在一天之内发现它。如何在Wakanda中使用Node Worker

那一天来了,我正在寻求一些帮助。

我需要调用一个Web服务,然后处理返回的数据。我可以用XMLHttpRequest调用服务,但是我必须从中获取有用的数据。

有一个很好的节点模块,既可以调用服务,也可以用一次调用返回有用形式的数据。

我可以设置Node worker(在Wakanda)来做到这一点并验证它是否有效。

我的问题是处理代理中的异步调用。

到节点模块的调用看起来是这样的:

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 
 
});

所以我的包装的代码看起来是这样的:

function doSomething(param){ 
 

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

这一切听起来像我应该知道该怎么做。不过,我认为我正在为新事物挣扎,让自己陷入困境。 PS:我没有尝试过Threadify,但无法弄清楚如何让工作人员返回收到的错误。

我真的很感激任何帮助或指针在这里。

回答

2

如果我正确理解您的问题,则不能在异步调用完成后从函数返回值。您需要处理myModule.getData回调中的数据。

如果您希望在调用函数(如doSomething)中处理它,您可以使用承诺来“返回”一个值。

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

是的,看起来像。谢谢杰夫。 –