JavaScript 事件循环不会“运行到完成”

问题描述 投票:0回答:1

根据 MDN,JavaScript 事件循环中的消息“运行至完成”。
https://developer.mozilla.org/docs/Web/JavaScript/Event_loop#run-to-completion

但我创造了一个案例,这种情况似乎不会发生。

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()

输出:

abort 1 start
abort 2
abort 1 end

我期待看到这个输出:

abort 1 start
abort 1 end
abort 2

有人可以解释一下这是怎么回事吗?

javascript event-loop abortcontroller
1个回答
0
投票

当事件由代码直接触发时,它会同步运行侦听器。 dispatchEvent() 的 MDN 文档解释了这一点:

与“本机”事件(由浏览器触发并通过事件循环异步调用事件处理程序)不同,

dispatchEvent()
同步调用事件处理程序。所有适用的事件处理程序都会在
dispatchEvent()
返回之前调用并返回。

虽然这没有具体提到

abort()
,但我认为没有理由不以类似方式对待它。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.