在循环异步调用后发送响应

时间:2016-06-17 13:15:52

标签: javascript node.js loops express

我有以下请求api:

api.get_info(name, function(err, data) {
    if (err) {
        return console.log(err);
    }
    result.push(data);
});

根据这个要求,我只回复了一个产品,但有10个产品应该从api收到结果并发送给客户端。

我尝试在循环中添加api调用:

app.get('/info', (req, res) => {
    let products = ["product 1", "product 2", ... "product 10"];

    let full_info = [];

    for (let product of products) {
        api.get_info(product, function(err, data) {
            if (err) {
                return console.log(err);
            }
            full_info.push(data);
        });
    }

    res.json(full_info);
});

现在在收到所有信息之前发送了回复。 如何在获取所有数据时发送响应?

没有异步和承诺可以实现吗?

1 个答案:

答案 0 :(得分:0)

您可能会发现async.js对此感兴趣。

在你的情况下:

async.each(products, function (product, callback) {
    api.getInfo(product, callback);
}, function (err, datas) {
    res.json(datas);
}