我有一个递归方法,它基本上会增加一个值,直到达到最大值。
increase(delay) {
return new Promise((resolve, reject) => {
if (this.activeLeds < this.MAX_LEDS) {
this.activeLeds++
console.log(this.activeLeds)
}
return resolve()
}).delay(delay).then(() => {
if (this.activeLeds < this.MAX_LEDS) {
this.increase(delay)
} else {
return Promise.resolve()
}
})
}
我正在测试一些功能,我想知道increase()
方法何时完成(又称已解决)。
bounce(delay) {
return new Promise((resolve, reject) => {
this.increase(50).then(console.log('done'))
})
}
然而,当我在
之后解决承诺时,我认为我做错了什么this.activeLeds < this.MAX_LEDS
不再是真的。我认为这与我没有解决原始承诺的事实有关,但我无法弄清楚如何修复它。
答案 0 :(得分:3)
您忘记return
来自then
回调的递归调用的结果,因此无法等待,承诺将立即实现。
使用
increase(delay) {
if (this.activeLeds < this.MAX_LEDS) {
this.activeLeds++
console.log(this.activeLeds)
}
return Promise.delay(delay).then(() => {
if (this.activeLeds < this.MAX_LEDS) {
return this.increase(delay)
// ^^^^^^
}
})
}
顺便说一句,我建议避免在每次迭代时测试两次条件,并且即使在第一次调用时也立即停止而没有延迟:
increase(delay) {
if (this.activeLeds < this.MAX_LEDS) {
this.activeLeds++
console.log(this.activeLeds)
return Promise.delay(delay).then(() => // implicit return from concise arrow body
this.increase(delay)
)
} else {
return Promise.resolve()
}
}