首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Promises + async.js

Promises + async.js
EN

Stack Overflow用户
提问于 2017-03-28 04:29:14
回答 3查看 364关注 0票数 2

我经常读到在async.js中使用Promises不是一个好主意。我想知道为什么。

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

代码语言:javascript
复制
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);
  });
});

如果我不应该同时使用两者,如何达到相同的效果?让我们忘记异步/等待一分钟,回到只有Promises和async.js存在的日子。我能做些什么?

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2017-03-28 06:14:24

Bluebird的Promise.map允许你跳过一个Iterable并设置一个并发。

代码语言:javascript
复制
return Promise.map(arrayOfFiles, file => {  
  return callExternalLib(file).then((data) => {
    file.data = data;
    return file;
  }
}, { concurrency: maxOfAsync }) 

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

票数 3
EN

Stack Overflow用户

发布于 2017-05-05 05:42:18

我认为把异步回调语法和promise语法结合起来会混淆代码。我不认为这有什么本质上的问题。如果我的代码都使用promises,并且我引入了一个使用回调的库,我通常会用promises包装这个库,以保持代码的整洁。

票数 0
EN

Stack Overflow用户

发布于 2020-12-21 03:32:33

当你想使用promises时,Async.js是一种"meh“。它擅长于它所做的事情,但它显然是一个为简化回调的使用而构建的库,后来进行了升级,以尝试与promises一起工作。它甚至尝试对代码进行一些自动魔术反编译,试图知道一个函数应该像返回promise的异步函数还是使用回调的非异步函数那样处理(而且,就像所有进行反编译的库一样,如果您使用Babel或类似工具编译代码,它可能会失败)。

我最近发布了一个库,它是async.js的一个替代品,它被精确地设计为只使用Promises (和async/await),从而使一个完全一致的库可以使用这些较新的工具工作。

结果被命名为modern async,如下所示:https://nicolas-van.github.io/modern-async/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43055877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档