← Back To API Reference

Promise.reduce

Promise.reduce(
    Iterable<any>|Promise<Iterable<any>> input,
    function(any accumulator, any item, int index, int length) reducer,
    [any initialValue]
) -> Promise

给定一个Iterable(数组是Iterable),或者一个可迭代的 promise,它产生 promise(或 promise 和值的混合),迭代遍历 Iterable 中所有的值放入一个数组中,并使用给定的 reducer 函数将数组减少为一个值

如果 reducer 函数返回一个 promise ,那么就会等待 promise 的结果,然后再继续下一个迭代。如果数组中的任何承诺都被拒绝,或者由 reducer 函数返回的 promise 被拒绝,那么结果也是拒绝的。

按顺序读取给定的文件,并将其内容作为整数进行汇总。每个文件只包含文本 10

Promise.reduce(["file1.txt", "file2.txt", "file3.txt"], function(total, fileName) {
    return fs.readFileAsync(fileName, "utf8").then(function(contents) {
        return total + parseInt(contents, 10);
    });
}, 0).then(function(total) {
    //Total is 30
});

如果 initialValueundefined (或一个解决为 undefined 的 promise),并且 iterable 只包含一个条目,那么回调将不会被调用,并且会返回 iterable 的单个条目。如果 iterable 是空的,则不会调用回调,并返回 initialValue (这可能是 undefined)。

Promise.reduce 会尽快地开始调用 reducer,这就是为什么你可能想要用它而不是 Promise.all(在您调用 Array#reduce 之前等待整个数组,也就是说需要等待 Promise.all 全部完成)。