Mam funkcję foo(), która zwraca obietnicę (Promise). Funkcja foo() może się wykonywać około 1-3 sekundy. Chciałbym aby za każdym razem po wykonaniu mijała sekunda i żeby funkcja była ponownie wywoływana. setInterval niestety nie działa w obu formach:
setInterval(() => {
foo().then(); // ale na co czekamy?
}, 1000);
lub
setInterval(async () => {
await foo();
}, 1000;
Efekt jest taki, że w przypadku gdy wykonanie foo() trwa dłużej niż 1 sekundę, to setInterval nie czeka na zakończenie i wywołuje funkcję foo() ponownie. Powoduje to, że dwa wywołania foo() wykonują się w tym samym czasie.