Skip to content

Instantly share code, notes, and snippets.

@voltrevo
Created May 13, 2015 00:35
Show Gist options
  • Save voltrevo/27090dbad02e1b38d769 to your computer and use it in GitHub Desktop.
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.
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