【问题标题】:Get response from zeromq in nodejs从nodejs中的zeromq获取响应
【发布时间】:2020-04-08 22:19:38
【问题描述】:

我不明白如何在 nodejs 中编写一个返回 zeromq 响应的函数:到目前为止我写了这个;

module.exports = {

    getInfo: function(id) {

        var requester = zmq.socket('req');
        var config = 'NACK';

        requester.connect("ipc:///tmp/endpoint");

        console.log("Sending request...");
        requester.send(["GET_INFO","1234"]);

        requester.on("message", function(reply) {
            //console.log("Received reply", ": [", reply.toString(), ']');

            requester.close();
            return reply.toString();
          });
    },

}

如果我在“on”回调中启用日志,一切正常,我就会收到我要求的信息。但是,如果我从另一个脚本调用此函数,则返回值为“未定义”。从外部调用 getInfo 函数时,如何“提取”这些数据并返回它们? 谢谢

【问题讨论】:

    标签: node.js zeromq


    【解决方案1】:

    您的return 与您的getInfo 函数无关,而是与您定义的匿名回调函数function(reply) {... 有关。

    您可以将您的函数转换为返回一个 Promise,但它需要您等待它(或在调用方使用带有回调的 then):

    module.exports = {
    
        getInfo: function(id) {
            return new Promise(resolve => {
                var requester = zmq.socket('req');
                var config = 'NACK';
    
                requester.connect("ipc:///tmp/endpoint");
    
                console.log("Sending request...");
                requester.send(["GET_INFO","1234"]);
    
                requester.on("message", function(reply) {
                    //console.log("Received reply", ": [", reply.toString(), ']');
    
                    requester.close();
                    resolve(reply.toString());
                });
            });
        },
    
    }
    

    要了解 Promise 和 async/await,请参阅例如https://javascript.info/async-await

    使用 await 调用函数可以例如看起来像这样:

    var result = await getInfo(id); // Assuming the function is imported/required before
    

    【讨论】:

    • 我不确定我是否理解正确:如果我尝试打印返回值,以这种方式更改代码我会得到一个'Promise { }'。我尝试更改您向我提出的 async-wait 的所有内容,但未成功(再次,这似乎是一个同步问题,函数返回时数据不可用)
    • 您需要在异步范围内调用它:var result = await getInfo(id)。你能分享你调用getInfo的代码吗?我也许可以举一个更具体的例子。
    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 2018-05-17
    • 2018-07-02
    • 2015-03-29
    相关资源
    最近更新 更多