onFulfill = function(index, value) {
      'use strict';
      toFulfill--;
      values[index] = value;
      if (toFulfill == 0) {
        resolve(values);
      }
    }
@param {!Array<?(goog.Promise<TYPE>|goog.Thenable<TYPE>|Thenable|*)>}
    promises
@return {!goog.Promise<!Array<TYPE>>} A Promise that receives a list of
    every fulfilled value once every input Promise (or Promise-like) is
    successfully fulfilled, or is rejected with the first rejection reason
    immediately after it is rejected.
@template TYPE