延迟的承诺链不起作用

Promise chain with delay does not work

我需要将 promises 背靠背地链接起来,中间有延迟,但它不起作用。所有的承诺似乎同时解决。

这是一个似乎不起作用的简化示例。

function delayPromise() {
    const delay = 500;
    return new Promise(function(resolve, reject){
        setTimeout(resolve, 1000);
    });
}

const data = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
const promiseChain = Promise.resolve();

data.forEach(function(datum) {
    promiseChain
    .then(delayPromise)
    .then(delayPromise)
    .then(function(){
        // all of these are logged at the same time!
        console.log(`Datum logged: ${datum}`);
    });
});

谢谢

它们都是同时记录的,因为您总是链接基本承诺,promiseChain,而不重新分配它。也就是说,由于您永远不会重新分配该值,因此您总是从同一个 Promise.resolve.

开始一个新链

要更改它,只需确保使用从您设置的 .then 链中获得的新承诺重置 promiseChain 变量。例如:

promiseChain = promiseChain
    .then(delayPromise)
    // ... so on

确保 promiseChain 是用 let 声明的,否则将不起作用

这是您的修复示例。请注意,现在他们都在每个日志之间有一个延迟:

function delayPromise() {
    const delay = 500;
    return new Promise(function(resolve, reject){
        setTimeout(resolve, 1000);
    });
}

const data = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
let promiseChain = Promise.resolve();

data.forEach(function(datum) {
    promiseChain = promiseChain
    .then(delayPromise)
    .then(delayPromise)
    .then(function(){
        // These are all logged with a delay between each!
        console.log(`Datum logged: ${datum}`);
    });
});