JavaScript event loop does NOT "run to completion" - Stack Overflow

时间: 2025-01-06 admin 业界

According to MDN, messages in the JavaScript event loop "run to completion".
()

But I have created a case where this does not seem to happen.

abortController1 = new AbortController()
abortController2 = new AbortController()

abortController1.signal.addEventListener("abort", () =>
{
    console.log("abort 1 start")
    abortController2.abort()
    console.log("abort 1 end")
})

abortController2.signal.addEventListener("abort", () =>
{
    console.log("abort 2")
})

abortController1.abort()

According to MDN, messages in the JavaScript event loop "run to completion".
(https://developer.mozilla.org/docs/Web/JavaScript/Event_loop#run-to-completion)

But I have created a case where this does not seem to happen.

abortController1 = new AbortController()
abortController2 = new AbortController()

abortController1.signal.addEventListener("abort", () =>
{
    console.log("abort 1 start")
    abortController2.abort()
    console.log("abort 1 end")
})

abortController2.signal.addEventListener("abort", () =>
{
    console.log("abort 2")
})

abortController1.abort()

Output:

abort 1 start
abort 2
abort 1 end

I was expecting to see this output:

abort 1 start
abort 1 end
abort 2

Can someone please explain what's going on here?

Share Improve this question asked 18 hours ago olfekolfek 3,5024 gold badges37 silver badges54 bronze badges 2
  • I think when you trigger an event explicitly, as with calling abort(), that listener is called synchronously within the current event loop. – Barmar Commented 18 hours ago
  • @Barmar I too was suspecting that, hoping someone can link something to substantiate our suspicions