Created
May 13, 2015 00:35
-
-
Save voltrevo/27090dbad02e1b38d769 to your computer and use it in GitHub Desktop.
A map that lazily creates promises so that you can refer to possibly not yet existing promises by their id.
This file contains hidden or 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
var promiseMap = function() { | |
var api = {_: {}}; | |
api._.map = {}; | |
api._.getPromiseHandle = function(id) { | |
var promiseHandle = api._.map[id]; | |
if (!promiseHandle) { | |
promiseHandle = { | |
set: false, | |
deferred: RSVP.defer() | |
}; | |
api._.map[id] = promiseHandle; | |
} | |
return promiseHandle; | |
}; | |
api.resolve = function(id, value) { | |
var promiseHandle = api._.getPromiseHandle(id); | |
if (promiseHandle.set) { | |
throw new Error('Promise ' + id + ' has already been set.'); | |
} | |
promiseHandle.deferred.resolve(value); | |
promiseHandle.set = true; | |
}; | |
api.reject = function(id, value) { | |
var promiseHandle = api._.getPromiseHandle(id); | |
if (promiseHandle.set) { | |
throw new Error('Promise ' + id + ' has already been set.'); | |
} | |
promiseHandle.deferred.reject(value); | |
promiseHandle.set = true; | |
}; | |
api.get = function(id) { | |
return api._.getPromiseHandle(id).deferred.promise; | |
}; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment