1
私はループせずにdelay
機能を使用する場合、それは正常に動作Promise.then
方法で約束事がループ内で違うのはなぜですか?
function delay(msec) {
return (value) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(value);
}, msec);
});
}
}
を使用するようにdelay
ファンクション・ジェネレータを持っています。
var promise = Promise.resolve();
promise
.then(() => console.log(1))
.then(delay(1000))
.then(() => console.log(2))
.then(delay(1000))
.then(() => console.log(3))
.then(delay(1000));
しかし、私はループ内でそれを使用する場合、すべての数字をせずに印刷されています任意の遅延:
var loopPromise = Promise.resolve();
for (let i = 1; i <= 3; i++) {
loopPromise
.then(() => console.log(i))
.then(delay(1000));
}
なぜ約束がループで異なるのですか?どのように私はこのループの動作を修正することができますか?
は「その後」おおよそ構築定期的に、同期動作をシミュレートします。あなたのループは継続し、それぞれのタイマーは独立して起動します。ここでは、 'then'は本質的に発射同期を行います。 –