var Promise = function () { }; var isPromise = function (value) { return value instanceof Promise; }; var defer = function () { var pending = [], value; var promise = new Promise(); promise.then = function (callback) { if (pending) { pending.push(callback); } else { callback(value); } }; return { resolve: function (_value) { if (pending) { value = _value; for (var i = 0, ii = pending.length; i < ii; i++) { var callback = pending[i]; callback(value); } pending = undefined; } }, promise: promise }; };