如何将一个大的Promise.all拆分为几个较小的部分依次执行

  前段时间在用Promise.all执行一个非常大批量的操作时遇到一个奇怪的问题。

成都创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站建设、做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的竹山网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

  这个Promise.all需要遍历一个指定目录中的所有文件,并以异步的方式读取文件内容并进行后续操作。由于目录中的文件数目比较多(大约8000+),Promise.all在执行的过程中有许多文件读取失败,但是如果指定一个文件数量比较少的目录则不存在这个问题。查看浏览器的Network会看到一开始的时候这些文件的访问都是pending状态,但是随着数量的增加,一部分pending最后都变成failed了。然后在Console中也会看到有许多的Failed to load resource: net::ERR_INSUFFICIENT_RESOURCES错误。

  然后又在其它不同的浏览器中进行了尝试,发现Chrome内核的浏览器(Chrome和Edge)基本都存在这个问题,但是FireFox工作正常。初步断定有可能是浏览器自身内部机制导致的,所以尝试看看能否将并发的数量减少以规避错误。

  下面是优化之前的代码:

var aPromises = [];
paths.forEach(function(sPath) {
    aPromises.push(readDocument(sPath).then(function(oDocument) {
// other process
        return oDocument;
    }));
});
return Q.all(aPromises);

当前文章:如何将一个大的Promise.all拆分为几个较小的部分依次执行
当前链接:http://scyanting.com/article/dsojjih.html