Что ж, если вы хотите подождать, пока оно не закончится, вам следует позвонить еще раз после выполнения обещания.Таким образом, вместо этого вы изменили бы значение с setInterval
на setTimeout
.
Для целей этого вопроса я изменил время ожидания на 1 секунду вместо
function fun(){
return new Promise((resolve,reject)=>{
//Some database queries which may or may not complete in 60 seconds
resolve("done")
})
}
function self() {
setTimeout(()=>{
fun().then(d=>{
console.log(d)
}).then( self ); // call the setTimeout function again
},1000);
}
self();
Конечно, выберите лучшее имя, чем self
, это было похоже на единственное, что я мог придумать в короткие сроки:)
Обновление
Я думаю, что я неправильно понял вопрос, поэтому вам нужно только перезвонить, если он действительно завершился, и не ждать, пока он закончится, а затем начать новый интервал.
В этом случае вы можете вместо этого сделать что-то вроде этого:
function fun(){
fun.running = true;
return new Promise((resolve,reject)=>{
//Some database queries which may or may not complete in 60 seconds
resolve("done");
});
}
setInterval(()=>{
// just make sure the fun isn't running
if (!fun.running) {
fun()
.then(d=> console.log(d) )
.catch( err => console.log( err ) ) // error handling here to make sure the next block is run
.then( () => {
// and handle the reset of the flag here
fun.running = false;
} );
}
},1000);