Skip to content

Instantly share code, notes, and snippets.

@scarlac
Last active November 23, 2017 20:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save scarlac/d8e283771926dd23cdfc51007f4c24fd to your computer and use it in GitHub Desktop.
Save scarlac/d8e283771926dd23cdfc51007f4c24fd to your computer and use it in GitHub Desktop.
Async/await transpiled by hand to Promises
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