Javascript 承诺+;async.js

Javascript 承诺+;async.js,javascript,node.js,asynchronous,promise,async.js,Javascript,Node.js,Asynchronous,Promise,Async.js,我经常读到,在async.js中使用承诺不是一个好主意。我想知道为什么 我在一个项目中工作,我使用async.eachLimit控制文件中异步操作的限制,并承诺在完成所有异步操作后返回结果。例如: const maxOfAsync = process.env.maxOfAsync || 500; return new Promise((resolve, reject) => { async.eachLimit(arrayOfFiles, maxOfAsync, (file, ca

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

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

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/Wait,回到只有Promises和async.js存在的日子。我能做什么

谢谢。

蓝鸟允许您跨过Iterable并设置并发性

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

一旦解析了所有承诺,Promise.map将解析一个新的值数组。不需要像原始代码那样修改现有数组,上面的示例就是这样做的

我认为将异步回调语法与承诺语法相结合可能会使代码混乱。我不认为这有什么内在的问题。如果我的代码都使用承诺,并且我引入了一个使用回调的库,我通常会用承诺来包装该库,以保持代码的整洁。

Async.js在您想要使用承诺时有点“meh”。它擅长于is所做的事情,但显然是一个库,它是为了简化回调的使用而构建的,后来被升级以尝试使用承诺。它甚至尝试对代码进行一些自动神奇的反编译,试图知道是否应该像异步函数一样处理函数,返回承诺,还是像使用回调函数处理非异步函数一样处理函数(而且,与所有进行反编译的库一样,如果使用Babel或类似工具编译代码,它可能会失败,也可能会失败)

我最近发布了一个库,它是async.js的替代品,并且只使用承诺(和async/await),从而使一个完全一致的库能够使用这些更新的工具工作


结果被命名为modern async,如下所示:

“做一些异步的事情”也使用承诺,我想?这基本上与我将两者结合的方式相同。是的,明确地说。我更新了问题@Bergi“
。拒绝(拒绝);
”看起来肯定已经错了