Created
November 23, 2012 17:36
-
-
Save normanrz/4136597 to your computer and use it in GitHub Desktop.
DispatchedWorker + RequireJS plugin
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
### define | |
jquery : $ | |
underscore : _ | |
### | |
# `DispatchedWorker` is a wrapper around the WebWorker API. First you | |
# initialize it providing url of the javascript worker code. Afterwards | |
# you can request work using `send` and wait for the result using the | |
# returned deferred. | |
class DispatchedWorker | |
constructor : (url) -> | |
@worker = new Worker(url) | |
@worker.onerror = (err) -> console?.error(err) | |
# Returns a `$.Deferred` object representing the completion state. | |
send : (payload) -> | |
deferred = new $.Deferred() | |
workerHandle = Math.random() | |
workerMessageCallback = ({ data : packet }) => | |
if packet.workerHandle == workerHandle | |
@worker.removeEventListener("message", workerMessageCallback, false) | |
if packet.error | |
deferred.reject(packet.error) | |
else | |
deferred.resolve(packet.payload) | |
@worker.addEventListener("message", workerMessageCallback, false) | |
@worker.postMessage { workerHandle, payload } | |
deferred.promise() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
### define | |
dispatched_worker : DispatchedWorker | |
### | |
load : (name, parentRequire, load, config) -> | |
load(new DispatchedWorker(parentRequire.toUrl(name))) | |
return |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Please can you add a license header to this. I would like to be able to use it with your permission. It would be very much appreciated.