Skip to content

Instantly share code, notes, and snippets.

@msanders
Created April 14, 2014 18:45
Show Gist options
  • Save msanders/26f73ba4d0a2d0a4fb38 to your computer and use it in GitHub Desktop.
Save msanders/26f73ba4d0a2d0a4fb38 to your computer and use it in GitHub Desktop.
class Promise<X> {
map<B>(onValue: (x: X) => B): Promise<B> {
AS.assertParameter(onValue, "onValue");
return new Promise<B>((resolve, reject) => {
this.parsePromise.then(x => {
resolve(onValue(x));
}, e => {
reject(e);
return Parse.Promise.as();
});
});
}
then<B>(onValue: (x: X) => Promise<B>, onError?: (err: any) => Promise<B>): Promise<B> {
AS.assertParameter(onValue, "onValue");
return new Promise<B>((resolve, reject) => {
this.parsePromise.then(x => {
resolveCallback(x, onValue, resolve, reject);
}, e => {
resolveCallback(e, onError, resolve, reject);
return Parse.Promise.as();
});
});
}
}
function resolveCallback<X,B>(
value: X,
callback: (x: X) => any,
resolve: (x?: B) => void,
reject: (e: any) => void
): void {
var val = callback(value);
AS.assert("Expected " + val + " to be promise", () => Promise.is(val));
val.parsePromise.then((y: B) => {
resolve(y);
}, (err: any) => {
reject(err);
return Parse.Promise.as();
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment