【问题标题】:Serial Execution of PromisePromise 的串行执行
【发布时间】:2016-07-09 00:22:20
【问题描述】:

我想执行一个函数,其参数从一组值循环。每个执行都必须等待前一个执行完成。 下面的示例代码应该打印出来:

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

谢谢!

p.

'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)
})

【问题讨论】:

标签: javascript node.js es6-promise


【解决方案1】:

如果你只想要 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

【讨论】:

  • 这就是我想要做的!谢谢
  • 或者只是vs.reduce((p, v) => p.then(() => f1(v)), Promise.resolve())
  • 对,同样的事情。我只是选择了多行并重新使用问题中的变量名称来(希望)提高可读性。
猜你喜欢
  • 2023-03-23
  • 2016-08-07
  • 2020-03-13
  • 2019-04-17
  • 2017-06-09
  • 2016-03-11
  • 2016-07-15
  • 2015-11-14
相关资源
最近更新 更多