Я хотел запускать асинхронный метод внутри обещания каждые x секунд, пока не будет выполнено определенное условие, а затем вызвать resolve()
для разрешения обещания.Я попробовал это, используя два подхода (показано ниже).Второй подход разработан с использованием IIFE и дает правильные результаты, но в первом подходе метод setTimeout
выполняется только один раз, но в соответствии с определением.из setTimeout
он должен выполнять обратный вызов в течение неопределенного периода времени в течение указанного промежутка времени, пока не будет вызван clearTimeout()
.Может кто-нибудь объяснить мне, почему я не получаю желаемый результат при первом подходе?
Подход 1
function func2() {
return new Promise((resolve, reject) => {
setTimeout(() => {
client.get('statuses/user_timeline', params1).then((response) => {
// some code
// some code
if (condition is met) {
return resolve()
} else {
// some code
}
})
}, 1000)
})
}
Подход 2
function func2 () {
return new Promise((resolve, reject) => {
(function func1() {
client.get('statuses/user_timeline', params1).then((response) => {
// some code
if (condition is met) {
return resolve()
} else {
// some code
setTimeout(func1, 1000)
}
})
})()
}
}