Overview
C# and JavaScript async/await provide the same feature dealing with asynchronous calls.But the details are not the same.
Here is an article that talk about it
Comparing asynchronous patterns between C# and JavaScript
Code Sample
Here is a sample in NodeJs v 9.2, that show case why async/await is cleaner than nested Promises.But it is important to understand what really happen behind the scene. See my comments.
/* Code sample based from JavaScript ES 2017: Learn Async/Await by Example Brandon Morelli https://codeburst.io/javascript-es-2017-learn-async-await-by-example-48acc58bad65 */ /* Nested asynchronous function with Promises */ function doubleAfter2Seconds(x) { return new Promise(resolve => { setTimeout(() => { resolve(x * 2); }, 1000); }); } function addPromise(x){ return new Promise(resolve => { doubleAfter2Seconds(10).then((a) => { doubleAfter2Seconds(20).then((b) => { doubleAfter2Seconds(30).then((c) => { resolve(x + a + b + c); }) }) }) }); } console.log(`starting big async calculation with Promise`); addPromise(5).then( (result) => { console.log(`big async calculation result:${result}`); }); /* Nested asynchronous function with async/await */ console.log(`starting big async calculation async/await`); /* The function addAsync does not return the result of the expression: x + a + b + c, as the code imply. Because the function is marked with the word async, the function really return a Promise. The line `return x + a + b + c;` will be executed if the promise succeed and the value will be passed as the parameter of the method resolve(). */ async function addAsync(x) { const a = await doubleAfter2Seconds(10); // Shortcut syntax to avoid to attach a // then() and store the resolved value // of the Promise in the variable a const b = await doubleAfter2Seconds(20); const c = await doubleAfter2Seconds(30); return x + a + b + c; }; async function main() { // Long syntax to call an async method using a then(). addAsync(5).then( (result) => { /* result contains x + a + b + c */ console.log(`big async calculation async/await result:${result}`); } ); // Shortcut syntax to avoid to attach a then() const r = await addAsync(5); console.log(`big async calculation async/await r:${r}`); } main();
No comments:
Post a Comment