下面的代码应该通过向某个远程服务器(kafka代理)生成请求消息来处理http请求,并等待它的响应。当响应消息到达时-它应该作为http响应(json或其他)返回。
router.get('/status', function(req, res, next) {
// init the producer
...
// 1st async function
producer.on('ready', function () {
// some code for generating payloads (data for a message)
...
// 2nd async function
producer.send(payloads, function (err, data) {
// some log of success sending message
...
// 3rd async function
consumer.on('message', function (message) {
// got some response message
res.send("message: " + message);
});
});
});
});
我能把这些同步到一起吗?它不是我的?
编辑:我会尽量说得更清楚。考虑以下代码:
function boo() {
// part 1 - init some consumer
console.log("1. finish init");
// part 2 - This is async function. whenever messages will arrive - this function will be fetched.
consumer.on('message', function (message) {
console.log("2. message arrive!");
return message;
}
// part 3
console.log("3. end function");
return null;
}
假设第二部分发生在1秒之后。输出为:
1. finish init
3. end function
2. message arrive!
而我的目标是等待异步消息(第2部分)并返回它的值。我怎样才能做到这一点?
2条答案
按热度按时间rn0zuynd1#
问这个问题时,我对node.js完全陌生。看了philip roberts的视频后,我意识到javascript实际上是如何工作的。然后,我用一个全球性的
messageArray
&amessageId
计数器。每个用户请求都保存在messageArray
(及其相关处理程序对象,以供以后响应)。然后,消息通过Kafka发送到内部系统组件。在消息从系统返回之前,用户不会得到响应)。当一条消息到达kafka消费者(来自系统组件)时,我们提取相关id并回复相关用户)。代码如下:wvmv3b1j2#
你可以用
async
图书馆。或者你可以用https://github.com/andyshin/sequenty