承诺的连续执行

时间:2016-07-08 15:42:38

标签: javascript node.js es6-promise

我想用一个值数组循环执行一个函数。每次执行都必须等待之前完成。 下面的示例代码应该打印:

Done: 1
Done: 2
Done: 3
Done: 4
Done: 5

谢谢!

'use strict';

function f1(value) {
    return new Promise((resolve, reject) => {
        setTimeout(function() {
            console.log('Done: ' + value);
            resolve(true)
        }, Math.random() * 2000 + 1000);
    });
}

const vs = [0,1,2,3,4,5];

vs.reduce((start, next) => {
    return f1(next)
})

1 个答案:

答案 0 :(得分:2)

如果你只想要ES6,试试这个:

'use strict';

function f1(value) {
    return new Promise((resolve, reject) => {
        setTimeout(function() {
            console.log('Done: ' + value);
            resolve(true)
        }, Math.random() * 2000 + 1000);
    });
}

const vs = [0,1,2,3,4,5];

let promiseChain = vs.reduce((start, next) => {
    return start.then(() => f1(next));
}, Promise.resolve());

promiseChain.then(() => console.log('Done!'));

如果您有兴趣从分辨率中获取值,您也可以尝试this