importisPromisefrom'./isPromise';/** * Similar to Array.prototype.reduce(), however the reducing callback may return * a Promise, in which case reduction will continue after each promise resolves. * * If the callback does not return a Promise, then this function will also not * return a Promise. */exportdefaultfunctionpromiseReduce(values,callback,initialValue){returnvalues.reduce(function(previous,value){returnisPromise(previous)?previous.then(function(resolved){returncallback(resolved,value);}):callback(previous,value);},initialValue);}