从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
我不明白如何编写 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