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。