Open wangning0 opened 6 years ago
(function() { function printMemory(i) { console.log(i) ; console.log(process.memoryUsage()) } // 记录 Promise 链的长度 var i = 0; function run() { return new Promise(function(resolve) { // 每增加 10000 个 Promise 打印一次内存使用情况 if (i % 1000 === 0) { global.gc() printMemory(i); } i++; // 模拟一个异步操作 setTimeout(function() { // 1000 个 Promise 之后退出 if(i === 10000 * 10) return resolve(); // 如果 resolve 的参数是一个 Promise ,外层 Promise 将接管这个 Promise 的状态,构成嵌套 Promise resolve(run()); }, 0); }).then(function() { // console.log(j); return true; }); } run().then(function (r) { global.gc() console.log(111) printMemory(); }); })();
可以参考Promise/A+规范 以及该issue
应该避免长时间的在根promise下不进行resolve操作,而进行递归promise,根据spec我们知道当resolve一个promise的时候,只有当下层的promise返回了状态,生层的promise才能返回状态
resolve
可以参考Promise/A+规范 以及该issue
应该避免长时间的在根promise下不进行
resolve
操作,而进行递归promise,根据spec我们知道当resolve一个promise的时候,只有当下层的promise返回了状态,生层的promise才能返回状态