如何在 Wakanda 中使用 Node Worker

How to use Node Worker in Wakanda

到目前为止,对我来说,Node Worker 的概念一直是听起来很有趣的事情之一,大约有一天我会找到答案。

好吧,那一天已经到来,我正在寻求帮助。

我需要调用 Web 服务然后处理数据 returned。我可以使用 XMLHttpRequest 调用该服务,但我必须从中获取有用的数据。

有一个很好的节点模块,它既可以调用服务,又可以通过一次调用以有用的形式 return 发送数据。

我可以设置 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,但无法弄清楚如何让工作人员 return 它收到的错误。

非常感谢任何帮助或指点。

如果我对您的问题的理解正确,您不能在异步调用完成后 return 来自函数的值。您需要在 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.
    });
}