javascriptweb-workershared-worker

Why does the SharedWorker onConnect event have a Ports array?


In all examples I've seen, they're similar to this

onconnect = function(e) {
    var port = e.ports[0];

    port.onmessage = function(e) {
        var workerResult = 'Result: ' + (e.data[0] * e.data[1]);
        port.postMessage(workerResult);
    }

    port.start();
}

Is there an instance where the ports array will ever have more than one element? Using chrome://inspect on the SharedWorker and printing out e, I get

MessageEvent

regardless of how many instances are spawned sharing the SharedWorker, where the length is always 1. Why isn't it just a MessageEvent instead of an array? What use case is there for it to be an array?


Solution

  • The reason is that it reuses the MessageEvent interface which can sometimes be dispatched with an array of multiple ports. That's all.