快递| 异步发出多个http请求

use*_*041 1 javascript node.js express

我目前正在建设一个小节点应用,使得一些API调用,使与它的图表的网页.我使用的快递和玉石为渲染引擎.

问题是我对javascript很新,我不知道如何计算我的http请求,所以当有多个请求时,我可以传递我从api(http get)获得的变量对象.我不知道如何将它映射出尽一个单一的对象,并将其发送到玉渲染引擎.

这是我到目前为止:

app.get('/test', function(req, res) {
    apiRequestGoesHere(name, function(error, profile) {
        //Get some data here
    });
    anotherApiRequest(tvshow, function(error, list) {
        //Get some data here
    });
    res.render('test', data);
});
Run Code Online (Sandbox Code Playgroud)

因为它是现在,页面呈现和请求都还没有做,如果我把里面的请求的一个res.render,我无法访问对方的数据.

所以,我要的是一个方法来设定,让我可以有多个API调用,然后做一个对象出了什么从REST API返回给我一些元素,并将其发送给玉这样我就可以使用的数据页.

Aar*_*our 5

你可能想使用异步,以帮助这一点. async.parallel对于像这样简单的事情是一个很好的选择:

app.get('/test', function(req, res) {
    async.parallel([
    function(next) {
        apiRequestGoesHere(name, function(error, profile) {
            //Get some data here
            next(null, firstData);
        });
    },
    function(next) {
        anotherApiRequest(tvshow, function(error, list) {
            //Get some data here
            next(null, secondData);
        });
    }], function(err, results) {
        // results is [firstData, secondData]
        res.render('test', ...);
    });
});
Run Code Online (Sandbox Code Playgroud)

这些函数的第一个参数next应该是一个错误(如果相关的话)(我把它null) - 一旦用错误调用一个函数,最后的函数将被调用同样的错误,其余的回调将被忽略.