4.4.1.2 将操作排入队列
RTCPeerConnection对象有一个操作队列[[Operations]],它确保队列中只有一个异步操作同时执行。如果下一个 promise 请求被调用时之前的 promise 还没返回,则将它们添加到队列中并等到队列前面所有的 promise 执行完毕并返回后再执行。
要将操作加入 RTCPeerConnection 对象的操作队列,请运行以下步骤:
让连接成为 RTCPeerConnection 对象。
如果 connection 的[[IsClosed]] 值为true,用 promise 包装一个新创建的 InvalidStateError 并以reject返回。
让操作成为即将入队的那一项。
创建新 promise ,名为 p
将操作附加到[[操作]]列表中。
如果[[操作]]的长度恰好为1,则执行操作。
promise返回后,如果状态是 fulfillment 或 rejection,请执行以下步骤:
如果connection的[[IsClosed]]值为true,则中止这些步骤。
如果操作返回的 promise 已完成并有值,则将 p 以 fulfill 的状态返回该值。
如果操作返回的 promise 被拒绝并有值,则将 p 以 rejected 的状态返回该值。
完成或拒绝p后,执行以下步骤:
如果connection的[[IsClosed]]值为true,则中止这些步骤。
删除[[操作]]的第一个元素。
如果[[操作]]非空,则执行[[操作]]队列中的第一个操作。
- 返回 p。