forEach with promises
可以有效地应用函数(cb
),该函数向数组的每个元素返回一个 promise,每个元素都等待处理,直到处理完前一个元素。
function promiseForEach(arr, cb) {
var i = 0;
var nextPromise = function () {
if (i >= arr.length) {
// Processing finished.
return;
}
// Process next function. Wrap in `Promise.resolve` in case
// the function does not return a promise
var newPromise = Promise.resolve(cb(arr[i], i));
i++;
// Chain to finish processing.
return newPromise.then(nextPromise);
};
// Kick off the chain.
return Promise.resolve().then(nextPromise);
};
如果你需要一次一个地高效处理数千个项目,这将非常有用。使用常规的 for
循环来创建 promises 会立即创建它们并占用大量的 RAM。