gpt4 book ai didi

javascript - window.postMessage 是否保证事件的顺序?

转载 作者:可可西里 更新时间:2023-11-01 01:52:03 39 4
gpt4 key购买 nike

window.onmessage = ...
window.postMessage('1', '*');
window.postMessage('2', '*');

postMessage ( http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#queue-a-task ) 是否保证事件的顺序?

最佳答案

不知道,虽然the spec的写法似乎暗示它没有做出这样的保证(这令人惊讶)。很明显,一旦 MessageEvent 添加到接收端的 task queue 中,它的顺序就会保持不变,尽管 MessageEvent 创建和分发与原始 postMessage 调用异步,因此理论上您可能会遇到以下情况:

主线程:

window.postMessage('1', '*'); --> thread spawned to create MessageEvent
window.postMessage('2', '*'); --> new thread spawned for another MessageEvent

如果线程管理系统允许第二个 postMessage 在第一个线程设法调度 MessageEvent 之前执行,并且出于某种不幸的原因允许较新的线程执行 (一个稀释的优先级反转),再次在第一个成功发送之前,那么你确实会以相反的顺序收到这些消息。

虽然规范中可能有其他地方为这些异步执行提供了更多上下文并排除了这种情况 - 我找不到它。

关于javascript - window.postMessage 是否保证事件的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7536901/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com