我不明白如何编写一个可以在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函数时,如何“提取”这些数据并返回它们?谢谢
[您的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