Skip to content

Commit

Permalink
start on message channel
Browse files Browse the repository at this point in the history
  • Loading branch information
nolanlawson committed Jul 20, 2016
1 parent bd58745 commit 8fde524
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 22 deletions.
50 changes: 29 additions & 21 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,31 +13,35 @@ function parseJsonSafely(str) {
}
}

function onMessage (self, e) {
var message = parseJsonSafely(e.data);
if (!message) {
// Ignore - this message is not for us.
return;
}
var messageId = message[0];
var error = message[1];
var result = message[2];

var callback = self._callbacks[messageId];

if (!callback) {
// Ignore - user might have created multiple PromiseWorkers.
// This message is not for us.
return;
}

delete self._callbacks[messageId];
callback(error, result);
}

function PromiseWorker(worker) {
var self = this;
self._worker = worker;
self._callbacks = {};

worker.addEventListener('message', function onIncomingMessage(e) {
var message = parseJsonSafely(e.data);
if (!message) {
// Ignore - this message is not for us.
return;
}
var messageId = message[0];
var error = message[1];
var result = message[2];

var callback = self._callbacks[messageId];

if (!callback) {
// Ignore - user might have created multiple PromiseWorkers.
// This message is not for us.
return;
}

delete self._callbacks[messageId];
callback(error, result);
worker.addEventListener('message', function (e) {
self._onMessage(e);
});
}

Expand All @@ -58,7 +62,11 @@ PromiseWorker.prototype.postMessage = function (userMessage) {
/* istanbul ignore if */
if (typeof self._worker.controller !== 'undefined') {
// service worker
self._worker.controller.postMessage(jsonMessage);
var channel = new MessageChannel();
channel.port1.onmessage = function (e) {
self._onMessage(e);
};
self._worker.controller.postMessage(jsonMessage, [channel.port2]);
} else {
// web worker
self._worker.postMessage(jsonMessage);
Expand Down
2 changes: 1 addition & 1 deletion register.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ function registerPromiseWorker(callback) {
function postMessage(msg) {
/* istanbul ignore if */
if (typeof self.postMessage !== 'function') { // service worker
e.source.postMessage(msg);
e.ports[0].postMessage(msg);
} else { // web worker
self.postMessage(msg);
}
Expand Down

0 comments on commit 8fde524

Please sign in to comment.