javascript - Node.js 异步函数

标签 javascript node.js asynchronous apache-kafka

以下代码应通过向某个远程服务器(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/

相关文章:

android - Flutter - 在每次应用重启后保持变量的值

javascript - Node js接收多条消息参数undefined

javascript - Sails 政策 - 通过协会搜索

angularjs - 带有 docker 的 Angular 应用程序 - 生产和开发

java - 异步日志记录的多线程与 JMS 队列

c# - 无法将任务<List<TEntity>> 转换为任务<IList<TEntity>>

javascript - 如何查找array2中不在array1中的元素?

javascript - 如何确定(跨浏览器)是否选择了任何内容?

javascript - 如何使用 Processing.Js 制作十四边形?

javascript - 试图了解函数回调的工作原理