Ниже приведена простая рекурсивная функция, которая принимает длину и уменьшает ее с помощью setTimeout
. Когда длина равна <=
0, все готово.
Как я могу написать эту функцию (на чистом JavaScript), чтобы я мог использовать ее так:
animate(999).then(...)
const animate = length => {
console.log(length)
length -= 10
if (length <= 0) {
length = 0
return
}
setTimeout(() => {animate(length)}, 10)
}
animate(999)
Обновление:
Это то, что я пробовал. У меня проблема в том, что кажется, что resolve
либо не вызывается, либо вызывается по другому обещанию.
const animate = length => {
return new Promise((resolve, reject) => {
console.log(length)
length -= 10
if (length <= 0) {
length = 0
resolve(true)
return // without this the function runs forever
}
setTimeout(() => {animate(length)}, 10)
})
}
animate(999).then(result => console.log(result))
** Рабочее обновление (но не понимаю его) **
const animate = length => {
return new Promise((resolve, reject) => {
console.log(length)
length -= 10
if (length <= 0) {
length = 0
return resolve(true)
}
setTimeout(() => {resolve(animate(length))}, 10)
})
}
animate(999).then(result => console.log(result))