node.js - Node.js 中的多个并发操作

标签 node.js

我想知道在 node.js 中处理多个并发操作的最佳方法是什么。例如,假设一个给定的 HTTP 请求需要进行 3 次数据库查询才能呈现响应,但每个请求都是独立的。我当前的天真实现是这样的(伪代码)

doRequest1(query, function (response1) {
   doRequest2(someQuery, function (response2) {
      doRequest3(someQuery, function (response3) {
          renderHTML(response1,response2,response3);
      });
   });
});

有更好的方法吗?等待对每个查询的响应以开始下一个查询似乎很浪费。

最佳答案

你应该使用流控制库,比如 async

https://github.com/caolan/async

或步骤

https://github.com/creationix/step

编辑:添加了一个异步示例

async.parallel([
    function(callback){
        doRequest1(query, callback);
    },
    function(callback){
        doRequest2(query2, callback);
    },
    function(callback){
        doRequest3(query3, callback);
    },
],
function(err, results){
    if (err) {
        renderError(err);
    } else {
        renderHTML(results[0], results[1], results[2]);
    }
});

如果你想让每个函数都按系列运行(等待前一个函数完成),你可以使用 async.series 而不是 async.parallel。如果查询依赖于先前查询的结果,您可以使用 async.waterfall。如果查询之间存在复杂的依赖关系图,您可以使用 async.auto。

关于node.js - Node.js 中的多个并发操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8553375/

相关文章:

javascript - browserify 如何使 Node.js 模块在浏览器中工作?

node.js - NodeJS/Express + HTTPS : How to deploy key & certificate to AWS EC2 node?

javascript - 使用 Node.js 和 Mailgun 发送 HTML 时遇到问题

mysql - 我的 Firebase 云函数给出 SequelizeConnectionError : connect ETIMEDOUT error whenever I query my MySql DB

node.js - 如何获取React和ReactDOM的ES6模块?

node.js - MongoDB按字段值查询子文档

node.js - 如何使用 Electron 运行和打包外部可执行文件?

javascript - 带有 expect 的 mocha 不适用于测试错误

javascript - 无法在 Node 中运行新的 firebase

node.js - 有没有办法检查是否刚刚使用 Okta 身份验证 API 创建了新帐户?