Last active
November 23, 2017 20:56
-
-
Save scarlac/d8e283771926dd23cdfc51007f4c24fd to your computer and use it in GitHub Desktop.
Async/await transpiled by hand to Promises
This file contains 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
function add(a, b) { | |
return new Promise((resolve, reject) => { | |
resolve(a + b); | |
}); | |
} // return promise | |
function multiply(x, y) { | |
return new Promise((resolve, reject) => { | |
resolve(x * y); | |
}); | |
} // return promise | |
async function mainAsync() { | |
let sum, product; | |
sum = await add(2, 3); // 5 | |
product = await multiply(2, 2); // 4 | |
console.log('async', 'sum + product', sum + product); | |
return 'ok'; | |
} | |
function mainPromise() { | |
const mainPromise = new Promise(resolve => { | |
let sum, product; // 'hoisted' variables | |
const block1 = () => { | |
return add(2, 3); | |
}; | |
const block2 = resolvedValue => { | |
sum = resolvedValue; // 5 | |
return multiply(2, 2); | |
}; | |
const block3 = resolvedValue => { | |
product = resolvedValue; // 4 | |
console.log('promise', 'sum + product', sum + product); | |
return 'ok'; | |
}; | |
const returnPromiseFromChain = block1() // Promise => 'ok' | |
.then(block2) | |
.then(block3); | |
resolve(returnPromiseFromChain); | |
}); | |
return mainPromise; | |
} | |
mainAsync() | |
.then(returnValue => { | |
console.log('async returned:', returnValue); | |
}) | |
.catch(err => { | |
console.error(err); | |
}); | |
mainPromise() | |
.then(returnValue => { | |
console.log('promise returned:', returnValue); // 'ok' | |
}) | |
.catch(err => { | |
console.error(err); | |
}); | |
// Output: | |
// async sum + product 9 | |
// promise sum + product 9 | |
// async returned: ok | |
// promise returned: ok |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment