【问题标题】:How to make multiple asynchronous callouts in a NodeJS/Express API如何在 NodeJS/Express API 中进行多个异步调用
【发布时间】:2017-03-21 16:31:32
【问题描述】:

我需要将一组 REST API 抽象为一个简单易用的 API。我正计划创建一个简单的 nodejs/express API,它使各个标注异步进行,然后一次返回所有结果。

JS 场景瞬息万变,我看到的很多信息似乎已经过时了。我希望有人能给我一些建议,并为我指出可能为此类场景设置的最佳实践或框架。

【问题讨论】:

    标签: javascript node.js express asynchronous


    【解决方案1】:

    这听起来就像一个简单的 Express 应用程序 - 没什么复杂的。我会使用 request-promise 模块为您提供一个基于 Promise 的良好接口,用于向其他主机发出请求,然后使用 Promise 将多个请求协调为一个响应。

    除此之外,您还必须向我们展示您正在尝试做什么的更多细节,以便我们提供更多细节。

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

    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() 模块处于维护模式

    仅供参考,request 模块及其衍生模块如request-promise 现在处于维护模式,不会积极开发以添加新功能。你可以阅读更多关于推理的信息herethis table 中有一个备选方案列表,其中对每个备选方案进行了一些讨论。我自己一直在使用got(),它从一开始就是使用 Promise 构建的,而且使用简单。

    【讨论】:

    • @RossBassett - 包含外部库通常不是“必要的”(你总是可以自己重写),但在我看来,node.js 的第一大优势是巨大的存储库NPM 中已经为您完成大量工作的模块并避免已经构建、测试和维护的代码来解决您遇到的问题只会适得其反。这是服务器端代码。包含一个已经构建的模块来完成您需要的事情,您无需花费任何费用(并为您节省大量时间和错误)。而且,如果您有任何问题,这里有完整的来源。
    【解决方案2】:

    就我个人而言,我为 nodejs 使用 async (Link Here),async.parallel 方法接受一组 ajax 调用,每个调用都有自己的可选回调,以及所有完成后的回调。

    【讨论】:

      猜你喜欢
      • 2017-11-14
      • 2018-03-05
      • 1970-01-01
      • 2021-09-10
      • 1970-01-01
      • 2012-02-09
      • 2021-01-17
      • 2020-04-01
      • 2020-02-08
      相关资源
      最近更新 更多