Created
June 19, 2018 17:26
-
-
Save EduardoSaverin/bab8027ad0429a83728c63452e043f33 to your computer and use it in GitHub Desktop.
Example for Promise Chaining
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
const wait = time => new Promise( | |
res => setTimeout(() => res(), time) | |
); | |
wait(200) | |
// onFulfilled() can return a new promise, `x` | |
.then(() => new Promise(res => res('foo'))) | |
// the next promise will assume the state of `x` | |
.then(a => a) | |
// Above we returned the unwrapped value of `x` | |
// so `.then()` above returns a fulfilled promise | |
// with that value: | |
.then(b => console.log(b)) // 'foo' | |
// Note that `null` is a valid promise value: | |
.then(() => null) | |
.then(c => console.log(c)) // null | |
// The following error is not reported yet: | |
.then(() => {throw new Error('foo');}) | |
// Instead, the returned promise is rejected | |
// with the error as the reason: | |
.then( | |
// Nothing is logged here due to the error above: | |
d => console.log(`d: ${ d }`), | |
// Now we handle the error (rejection reason) | |
e => console.log(e)) // [Error: foo] | |
// With the previous exception handled, we can continue: | |
.then(f => console.log(`f: ${ f }`)) // f: undefined | |
// The following doesn't log. e was already handled, | |
// so this handler doesn't get called: | |
.catch(e => console.log(e)) | |
.then(() => { throw new Error('bar'); }) | |
// When a promise is rejected, success handlers get skipped. | |
// Nothing logs here because of the 'bar' exception: | |
.then(g => console.log(`g: ${ g }`)) | |
.catch(h => console.log(h)) // [Error: bar] | |
; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment