diff --git a/es6-promise/es6-promise-tests.ts b/es6-promise/es6-promise-tests.ts index 3bf5d3707a..dc54f3b1ba 100644 --- a/es6-promise/es6-promise-tests.ts +++ b/es6-promise/es6-promise-tests.ts @@ -38,26 +38,26 @@ promiseStringArr = allResult; //race test var raceResult = Promise.race(arrayOfPromise); promiseString = raceResult; - + //then test var thenWithPromiseResult = promiseString.then(word => Promise.resolve(word.length)); promiseNumber = thenWithPromiseResult; var thenWithPromiseResultAndPromiseReject = promiseString.then(word => Promise.resolve(word.length), error => Promise.resolve(10)); -promiseNumber = thenWithPromiseResultAndPromiseReject; +promiseNumber = thenWithPromiseResultAndPromiseReject; var thenWithPromiseResultAndSimpleReject = promiseString.then(word => Promise.resolve(word.length), error => 10); -promiseNumber = thenWithPromiseResultAndSimpleReject; - +promiseNumber = thenWithPromiseResultAndSimpleReject; + var thenWithSimpleResult = promiseString.then(word => word.length); promiseNumber = thenWithSimpleResult; var thenWithSimpleResultAndPromiseReject = promiseString.then(word => word.length, error => Promise.resolve(10)); -promiseNumber = thenWithSimpleResultAndPromiseReject; +promiseNumber = thenWithSimpleResultAndPromiseReject; var thenWithSimpleResultAndSimpleReject = promiseString.then(word => word.length, error => 10); -promiseNumber = thenWithSimpleResultAndSimpleReject; +promiseNumber = thenWithSimpleResultAndSimpleReject; var thenWithUndefinedFullFillAndSimpleReject = promiseString.then(undefined, error => 10); promiseNumber = thenWithUndefinedFullFillAndSimpleReject; @@ -71,13 +71,16 @@ promiseNumber = thenWithNoResultAndNoReject; var voidPromise = new Promise(function (resolve) { resolve(); }); //catch test -var catchWithSimpleResult = promiseString.catch(error => 10); +var catchWithSimpleResult = promiseString.catch(error => 10); promiseNumber = catchWithSimpleResult; -var catchWithPromiseResult = promiseString.catch(error => Promise.resolve(10)); +var catchWithPromiseResult = promiseString.catch(error => Promise.resolve(10)); promiseNumber = catchWithPromiseResult; -promiseString = promiseString.catch(function () { throw new Error('Better error msg'); }); +promiseString = promiseString.catch(function () { + throw new Error('Better error msg'); + return null; +}); //examples coming from http://www.html5rocks.com/en/tutorials/es6/promises/ @@ -87,7 +90,7 @@ function get(url: string) { // Do the usual XHR stuff var req = new XMLHttpRequest(); req.open('GET', url); - + req.onload = function() { // This is called even on 404 etc // so check the status @@ -101,12 +104,12 @@ function get(url: string) { reject(Error(req.statusText)); } }; - + // Handle network errors req.onerror = function() { reject(Error("Network Error")); }; - + // Make the request req.send(); }); @@ -119,11 +122,11 @@ function getJSON(url: string) { } function addHtmlToPage(html: string) { - + } function addTextToPage(text: string) { - + } interface Story { diff --git a/es6-promise/es6-promise.d.ts b/es6-promise/es6-promise.d.ts index c71f7daca0..2718388070 100644 --- a/es6-promise/es6-promise.d.ts +++ b/es6-promise/es6-promise.d.ts @@ -1,57 +1,22 @@ // Type definitions for es6-promise // Project: https://github.com/jakearchibald/ES6-Promise -// Definitions by: François de Campredon +// Definitions by: François de Campredon , vvakame // Definitions: https://github.com/borisyankov/DefinitelyTyped interface Thenable { - then(onFulfilled?: (value: R) => Thenable, onRejected?: (error: any) => Thenable): Thenable; - then(onFulfilled?: (value: R) => Thenable, onRejected?: (error: any) => U): Thenable; - then(onFulfilled?: (value: R) => Thenable, onRejected?: (error: any) => void): Thenable; - then(onFulfilled?: (value: R) => U, onRejected?: (error: any) => Thenable): Thenable; - then(onFulfilled?: (value: R) => U, onRejected?: (error: any) => U): Thenable; - then(onFulfilled?: (value: R) => U, onRejected?: (error: any) => void): Thenable; + then(onFulfilled?: (value: R) => U | Thenable, onRejected?: (error: any) => U | Thenable): Thenable; } declare class Promise implements Thenable { /** - * If you call resolve in the body of the callback passed to the constructor, + * If you call resolve in the body of the callback passed to the constructor, * your promise is fulfilled with result object passed to resolve. - * If you call reject your promise is rejected with the object passed to resolve. - * For consistency and debugging (eg stack traces), obj should be an instanceof Error. + * If you call reject your promise is rejected with the object passed to resolve. + * For consistency and debugging (eg stack traces), obj should be an instanceof Error. * Any errors thrown in the constructor callback will be implicitly passed to reject(). */ - constructor(callback: (resolve : (result?: R) => void, reject: (error: any) => void) => void); - /** - * If you call resolve in the body of the callback passed to the constructor, - * your promise will be fulfilled/rejected with the outcome of thenable passed to resolve. - * If you call reject your promise is rejected with the object passed to resolve. - * For consistency and debugging (eg stack traces), obj should be an instanceof Error. - * Any errors thrown in the constructor callback will be implicitly passed to reject(). - */ - constructor(callback: (resolve : (thenable?: Thenable) => void, reject: (error: any) => void) => void); + constructor(callback: (resolve : (value?: R | Thenable) => void, reject: (error?: any) => void) => void); - /** - * onFulfilled is called when/if "promise" resolves. onRejected is called when/if "promise" rejects. - * Both are optional, if either/both are omitted the next onFulfilled/onRejected in the chain is called. - * Both callbacks have a single parameter , the fulfillment value or rejection reason. - * "then" returns a new promise equivalent to the value you return from onFulfilled/onRejected after being passed through Promise.resolve. - * If an error is thrown in the callback, the returned promise rejects with that error. - * - * @param onFulfilled called when/if "promise" resolves - * @param onRejected called when/if "promise" rejects - */ - then(onFulfilled?: (value: R) => Thenable, onRejected?: (error: any) => Thenable): Promise; - /** - * onFulfilled is called when/if "promise" resolves. onRejected is called when/if "promise" rejects. - * Both are optional, if either/both are omitted the next onFulfilled/onRejected in the chain is called. - * Both callbacks have a single parameter , the fulfillment value or rejection reason. - * "then" returns a new promise equivalent to the value you return from onFulfilled/onRejected after being passed through Promise.resolve. - * If an error is thrown in the callback, the returned promise rejects with that error. - * - * @param onFulfilled called when/if "promise" resolves - * @param onRejected called when/if "promise" rejects - */ - then(onFulfilled?: (value: R) => Thenable, onRejected?: (error: any) => U): Promise; /** * onFulfilled is called when/if "promise" resolves. onRejected is called when/if "promise" rejects. * Both are optional, if either/both are omitted the next onFulfilled/onRejected in the chain is called. @@ -62,84 +27,35 @@ declare class Promise implements Thenable { * @param onFulfilled called when/if "promise" resolves * @param onRejected called when/if "promise" rejects */ - then(onFulfilled?: (value: R) => Thenable, onRejected?: (error: any) => void): Promise; - /** - * onFulfilled is called when/if "promise" resolves. onRejected is called when/if "promise" rejects. - * Both are optional, if either/both are omitted the next onFulfilled/onRejected in the chain is called. - * Both callbacks have a single parameter , the fulfillment value or rejection reason. - * "then" returns a new promise equivalent to the value you return from onFulfilled/onRejected after being passed through Promise.resolve. - * If an error is thrown in the callback, the returned promise rejects with that error. - * - * @param onFulfilled called when/if "promise" resolves - * @param onRejected called when/if "promise" rejects - */ - then(onFulfilled?: (value: R) => U, onRejected?: (error: any) => Thenable): Promise; - /** - * onFulfilled is called when/if "promise" resolves. onRejected is called when/if "promise" rejects. - * Both are optional, if either/both are omitted the next onFulfilled/onRejected in the chain is called. - * Both callbacks have a single parameter , the fulfillment value or rejection reason. - * "then" returns a new promise equivalent to the value you return from onFulfilled/onRejected after being passed through Promise.resolve. - * If an error is thrown in the callback, the returned promise rejects with that error. - * - * @param onFulfilled called when/if "promise" resolves - * @param onRejected called when/if "promise" rejects - */ - then(onFulfilled?: (value: R) => U, onRejected?: (error: any) => U): Promise; - /** - * onFulfilled is called when/if "promise" resolves. onRejected is called when/if "promise" rejects. - * Both are optional, if either/both are omitted the next onFulfilled/onRejected in the chain is called. - * Both callbacks have a single parameter , the fulfillment value or rejection reason. - * "then" returns a new promise equivalent to the value you return from onFulfilled/onRejected after being passed through Promise.resolve. - * If an error is thrown in the callback, the returned promise rejects with that error. - * - * @param onFulfilled called when/if "promise" resolves - * @param onRejected called when/if "promise" rejects - */ - then(onFulfilled?: (value: R) => U, onRejected?: (error: any) => void): Promise; + then(onFulfilled?: (value: R) => U | Thenable, onRejected?: (error: any) => U | Thenable): Promise; - /** - * Sugar for promise.then(undefined, onRejected) - * - * @param onRejected called when/if "promise" rejects - */ - catch(onRejected?: (error: any) => Thenable): Promise; - /** - * Sugar for promise.then(undefined, onRejected) - * - * @param onRejected called when/if "promise" rejects - */ - catch(onRejected?: (error: any) => U): Promise; /** * Sugar for promise.then(undefined, onRejected) * * @param onRejected called when/if "promise" rejects */ - catch(onRejected?: (error: any) => void): Promise; + catch(onRejected?: (error: any) => U | Thenable): Promise; } declare module Promise { /** - * Make a new promise from the thenable. - * A thenable is promise-like in as far as it has a "then" method. + * Make a new promise from the thenable. + * A thenable is promise-like in as far as it has a "then" method. */ - function resolve(thenable?: Thenable): Promise; - /** - * Make a promise that fulfills to obj. - */ - function resolve(object?: R): Promise; - + function resolve(value?: R | Thenable): Promise; + /** * Make a promise that rejects to obj. For consistency and debugging (eg stack traces), obj should be an instanceof Error */ function reject(error: any): Promise; - + /** - * Make a promise that fulfills when every item in the array fulfills, and rejects if (and when) any item rejects. - * the array passed to all can be a mixture of promise-like objects and other objects. + * Make a promise that fulfills when every item in the array fulfills, and rejects if (and when) any item rejects. + * the array passed to all can be a mixture of promise-like objects and other objects. * The fulfillment value is an array (in order) of fulfillment values. The rejection value is the first rejection value. */ function all(promises: Promise[]): Promise; - + /** * Make a Promise that fulfills when any item fulfills, and rejects if any item rejects. */