从nodejs中的zeromq获取响应

Get response from zeromq in nodejs

我不明白如何编写 return在 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" 回调中启用日志,一切正常,我会收到我要求的信息。但是,如果我从另一个脚本调用此函数,return 值为 "undefined"。从外部调用 getInfo 函数时,如何 "extract" 这些数据和 return 它们? 谢谢

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

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

}

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

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

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