如何在Wakanda中使用Node Worker

时间:2017-09-08 01:08:04

标签: javascript node.js proxy worker wakanda

到目前为止,对于我来说,节点工作者的概念一直是听起来很有趣的事情之一,我会发现有一天。

那天已经来了,我正在寻求帮助。

我需要调用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,但无法解决如何让工作人员返回收到的错误。

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

1 个答案:

答案 0 :(得分:2)

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

如果你想在一个调用函数(比如doSomething)中处理它,你可以使用一个承诺" return"价值。

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