前段时间在用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);
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款