Promises + async.js

我总是阅读使用承诺与async.js不是一个好主意。 我想明白为什么。

我正在使用async.eachLimit来控制文件中asynchronous操作的限制,并承诺在完成所有asynchronous操作后返回结果。 例:

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); }); }); 

如果我不应该一起使用,如何达到相同的结果? 让我们忘记asynchronous/等待一分钟,然后返回只有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.map将parsing一个新的数组值。 不需要像原始代码那样对现有的数组进行变异,上面的例子就是这样做的。

我认为将asynchronouscallback语法与promise语法相结合可能会混淆代码。 我不认为它有什么内在的错误。 如果我的代码全部使用promise,并且引入了一个使用callback函数的库,我通常会使用承诺来封装该函数库,以保持代码的清洁。