以下代码应通过向某个远程服务器(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;
}
假设第 2 部分在 1 秒后发生。输出将是:
1. finish init
3. end function
2. message arrive!
而我的目标是等待异步消息(第 2 部分)并返回它的值。我怎样才能实现这一目标?
最佳答案
您可以使用async
库。
async.series([
fn1,
fn2
], function (err, results) {
console.log(results);
});
或者您可以使用https://github.com/AndyShin/sequenty
var sequenty = require('sequenty');
function f1(cb) // cb: callback by sequenty
{
console.log("I'm f1");
cb(); // please call this after finshed
}
function f2(cb)
{
console.log("I'm f2");
cb();
}
sequenty.run([f1, f2]);
关于javascript - Node.js 异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37725796/