javascript - Promise + async.js

标签 javascript node.js asynchronous promise async.js

我总是读到,将 Promises 与 async.js 一起使用并不是一个好主意。我想了解为什么。

我正在一个项目中使用 async.eachLimit 来控制文件中异步操作的限制,并 promise 在完成所有异步操作后返回结果。示例:

const maxOfAsync = process.env.maxOfAsync || 500;

return new Promise((resolve, reject) => {  
  async.eachLimit(arrayOfFiles, maxOfAsync, (file, callback) => {
    callExternalLib(file).then((data) => {
      file.data = data;
      callback();
    }).catch((error) => {
      callback(error);
    });
  }, (error) {
    if (error) return reject(error);
    resolve(arrayOfFiles);
  });
});

如果我不应该同时使用两者,如何达到相同的结果?让我们暂时忘记 async/await,回到只有 Promises 和 async.js 存在的日子。我能做什么?

谢谢。

最佳答案

bluebird 的Promise.map允许您跨过 Iterable 并设置并发性。

return Promise.map(arrayOfFiles, file => {  
  return callExternalLib(file).then((data) => {
    file.data = data;
    return file;
  }
}, { concurrency: maxOfAsync }) 

一旦所有 Promise 都得到解决,Promise.map 将解析一个新的值数组。不需要像原始代码和上面的示例那样改变现有数组。

关于javascript - Promise + async.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43055877/

相关文章:

javascript - 为什么我无法访问我的函数内的属性?

javascript - 如何在单击时选择特定类

javascript - 在 Typescript 2.7.2 中编写 Common.js 模块 - 编译问题

node.js - Passport 反序列化用户未在 sails 中调用

node.js - 如何在 Node.JS 中编写异步 While 循环

c# - Entity Framework 6 异步方法与同步方法的性能

javascript - 触发 Javascript 函数的 VBA 代码

node.js - DynamoDB 查询相当于 "WHERE author IN [..]"?

python - 有没有办法从Python调用Rust的异步接口(interface)?

javascript - 如何仅在准备好时才从react-meteor-data容器获取数据?