MessageChannel
接口的MessageChannel
构造函数返回一个新的MessageChannel
对象,返回的对象中包含两个MessagePort
对象。这个特性在 Web Worker
中可用。属于宏任务的一种。
MessageChannel
创建了一个通信的管道,这个管道有两个只读端口,每个端口都可以通过postMessage
发送数据,一个端口只要绑定了onmessage
回调方法,就可以接收从另一个端口传过来的数据。
// 一个简单的例子
let channel = new MessageChannel()
let port1 = channel.port1
let port2 = channel.port2
port1.onmessage = function(event) {
console.log('port1收到来自port2的数据' + event.data)
}
port2.onmessage = function(event) {
console.log('port2收到来自port1的数据' + event.data)
}
port1.postMessage('hhhh')
port2.postMessage('xxxx')
MessagePort
接口代表MessageChannel
的两个端口之一,可以让你从一个端口发送消息,并在消息到达的另一个端口监听。
-
MessagePort.postMessage
:从端口发送一条消息,并且可选是否将对象的所有权交给浏览器上下文。[要传输的对象,这些对象的所有权已转移到接收浏览器上下文,因此不可以再用于发送浏览器上下文] -
MessagePort.start
:开始发送该端口中的消息队列(只有使用EventTarget.addEventListener
的时候才需要调用,使用MessagePort.onmessage
时,是默认开始的) -
MessagePort.close
:断开端口连接,它将不再是激活状态
事件回调
继承自父类EventTarget
的事件回调
-
MessagePort.onmessage
是一个EventListener
,当类型为message
的MessageEvent
在该端口触发时,它将会被调用,表明端口收到了一条消息 -
MessagePort.onmessageError
是一个EventListener
,当类型为MessageError
的MessageEvent
被触发时,它将会被调用,表明端口收到了一条无法被反序列化的消息。
网友评论