Javascript 如何在NodeJS/Express API中创建多个异步调用

Javascript 如何在NodeJS/Express API中创建多个异步调用,javascript,node.js,express,asynchronous,Javascript,Node.js,Express,Asynchronous,我需要将一组RESTAPI抽象为一个简单易用的API。我正计划创建一个简单的nodejs/expressapi,它异步生成各个调用,然后一次返回所有结果 JS场景变化很快,我看到的很多信息似乎都过时了。我希望有人能给我一些建议,并为我指出可能为这种场景设置的最佳实践或框架。我个人使用async for nodejs(),async.parallel方法接受一系列ajax调用,每个调用都有自己的可选回调,以及完成所有操作时的回调。我个人使用async for nodejs(),async.para

我需要将一组RESTAPI抽象为一个简单易用的API。我正计划创建一个简单的nodejs/expressapi,它异步生成各个调用,然后一次返回所有结果


JS场景变化很快,我看到的很多信息似乎都过时了。我希望有人能给我一些建议,并为我指出可能为这种场景设置的最佳实践或框架。

我个人使用async for nodejs(),async.parallel方法接受一系列ajax调用,每个调用都有自己的可选回调,以及完成所有操作时的回调。

我个人使用async for nodejs(),async.parallel方法接受一系列ajax调用,每个调用都有自己的可选回调,以及完成所有操作时的回调。

这听起来像是一个简单的Express应用程序,并不复杂。我将使用
请求承诺
模块为您提供一个基于承诺的界面,用于向其他主机发出请求,然后使用承诺将多个请求协调为一个响应

除此之外,您还必须向我们展示更多关于您正试图为我们做什么的详细信息,以提供更多细节

如果您只想同时发出三个请求,然后合并结果,下面是一个粗略的提纲示例:

const rp = require('request-promise');
const express = require('express');
const app = express();

app.get('/getAll', (req, res) => {
    // construct urls

    let p1 = rp(url1);
    let p2 = rp(url2);
    let p3 = rp(url3);
    Promise.all([p1, p2, p3]).then(results => {
        // construct full response from the results array
        req.send(fullResponse);
    }).catch(err => {
        res.status(500).send(err.message);
    });

});


app.listen(80);

在维护模式下编辑2020年1月-request()模块


仅供参考,
请求
模块及其衍生产品(如)目前处于维护模式,不会积极开发以添加新功能。你可以阅读更多关于推理的内容。中有一个备选方案列表,并对每个备选方案进行了讨论。我一直在使用我自己,它从一开始就使用promises,而且使用起来很简单。

这听起来像一个简单的Express应用程序-没有什么复杂的。我将使用
请求承诺
模块为您提供一个基于承诺的界面,用于向其他主机发出请求,然后使用承诺将多个请求协调为一个响应

除此之外,您还必须向我们展示更多关于您正试图为我们做什么的详细信息,以提供更多细节

如果您只想同时发出三个请求,然后合并结果,下面是一个粗略的提纲示例:

const rp = require('request-promise');
const express = require('express');
const app = express();

app.get('/getAll', (req, res) => {
    // construct urls

    let p1 = rp(url1);
    let p2 = rp(url2);
    let p3 = rp(url3);
    Promise.all([p1, p2, p3]).then(results => {
        // construct full response from the results array
        req.send(fullResponse);
    }).catch(err => {
        res.status(500).send(err.message);
    });

});


app.listen(80);

在维护模式下编辑2020年1月-request()模块


仅供参考,
请求
模块及其衍生产品(如)目前处于维护模式,不会积极开发以添加新功能。你可以阅读更多关于推理的内容。中有一个备选方案列表,并对每个备选方案进行了讨论。我一直在使用我自己,它从一开始就使用promises,使用起来很简单。

@RossBassett-通常没有“必要”包含外部库(你可以自己重写),但在我看来,node.js的#1优势在于NPM中的巨大模块库已经为您做了大量工作,避免使用已经构建、测试和维护的代码来解决您的问题只会适得其反。这是服务器端代码。包含一个已经构建的模块来完成您需要的任务,这不需要任何成本(并为您节省大量时间和bug)。而且,如果您有问题,完整的源代码就在那里。@RossBassett-通常没有“必要”包含外部库(您可以自己重写它),但在我看来,node.js的#1优势是NPM中有大量模块存储库,这些模块已经为您做了大量工作,并且避免了已经构建的模块,解决问题的经过测试和维护的代码只会适得其反。这是服务器端代码。包含一个已经构建的模块来完成您需要的任务,这不需要任何成本(并为您节省大量时间和bug)。如果你有问题,完整的资料来源就在那里。