node.js - Bluebird - 如何以 block 的形式循环遍历数组,等待 block 响应

标签 node.js

有没有办法循环遍历一个id数组,分块,等待这个 block 的响应继续循环?

例如:

Promise = require("bluebird")

function(array){
  return Promise.*something that will loop chunks from my array and wait for each chunk response*.map(function(id){
          return myfunction(id);
        });
}

我的问题是我需要等待我正在访问的数据库的响应,而且它无法响应我同时创建的所有调用。我的代码引发了超时异常,因为我太激进了。

我的代码如下:

Promise = require("bluebird")

function(array){
 return Promise.map(array, function(id){
        return myfunction(id);
      });
}

编辑: 我找到了解决方案!

Promise = require("bluebird")

function(array){
 return Promise.map(array, function(id){
        return myfunction(id);
      }, {concurrency: 10});
}

最佳答案

如果您可以不使用 promises,async 模块有很多方法可以处理这些情况。如果您想一次发出一个请求,可以使用 eachSeries()。如果您想提高一点效率,可以使用 parallelLimit,它可以确保同时触发最多 X 个回调。

还有异步的 promise 版本,例如 async-q 和 bluebird-promise 端口。

关于node.js - Bluebird - 如何以 block 的形式循环遍历数组,等待 block 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32407330/

相关文章:

windows - 如果运行 node.js 的 Azure 辅助角色终止,是否会重新启动 Node 进程?

javascript - 使用 NodeJS 从外部页面返回 Javascript 变量数据

windows - node.js 和命令行 (cmd.exe)

javascript - 使用 Node.js 和 steam-trade 优惠时出现类型错误

javascript - 获取 "TypeError: schema.virtual(...).get is not a function"

javascript - 使用NodeJS,head中的javascript无法使用来自服务器的参数

css - 缩进的 Sass 语法不适用于 node-sass 和 gulp-sass

node.js - 如何使 NodeJS Passport session 保持事件状态

node.js - 如何将 Typescript 定义添加到 Express req 和 res

javascript - react 等待服务器响应