Skip to content

Instantly share code, notes, and snippets.

@normanrz
Created November 23, 2012 17:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save normanrz/4136597 to your computer and use it in GitHub Desktop.
Save normanrz/4136597 to your computer and use it in GitHub Desktop.
DispatchedWorker + RequireJS plugin
### 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()
### define
dispatched_worker : DispatchedWorker
###
load : (name, parentRequire, load, config) ->
load(new DispatchedWorker(parentRequire.toUrl(name)))
return
@rwl
Copy link

rwl commented Aug 14, 2015

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment