从nodejs中的zeromq获取响应

问题描述 投票:0回答:1

我不明白如何编写一个可以在nodejs中返回零mq响应的函数:到目前为止,我已经编写了该函数;

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个回答
0
投票

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

您可以将您的函数转换为返回承诺,但是将需要您等待它(或在调用方的回调中使用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

© www.soinside.com 2019 - 2024. All rights reserved.