延迟的承诺链不起作用
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}`);
});
});
我需要将 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}`);
});
});