Would async bar()
wait for sync foo()
to finish before awaiting the new promise/timeout and calling bar()
again?
function foo() {
console.log('is bar waiting for me to finish?');
}
async function bar() {
foo(); // is this blocking?
await new Promise((r) => setTimeout(r, 10));
await bar();
}
bar();
The short answer is "yes". I mean, foo()
which is sync will block bar()
execution until foo()
finishes. But, as bar()
is async, then foo()
will not block codes outside of bar()
.
const delay = 3000; // 3 seconds of delay.
function foo() {
console.log('Is bar waiting for me to finish?');
console.log('Answer: Yes!');
}
async function bar() {
await new Promise((r) => setTimeout(r, delay)); // waits `delay` and `foo()`.
foo(); // is this blocking? r: yes
await new Promise((r) => setTimeout(r, delay)); // waits `delay` and loop.
await bar(); // loops.
}
// Will not block the lines that follows:
bar();
// Unblocked line.
console.log('I am not blocked by `bar()`.');