<div id="__MailbirdStyleContent" style="font-size: 10pt;font-family: arial;color: #000000"><p style="font-size: 13.3333px"><span style="font-size: 13.3333px;line-height: 1.5;font-family: arial">It strikes me as an interesting development to see that the current definition of Async/Await (as I see it), is just simple syntactic sugar for `.then()`.  While I, to an extent, see the point of such a command as being useful, I remain unaware of the exact reasoning why we need to include promises in the first place.  Wouldn't it be so much more powerful to be able to use completely normal syntax, as you would in synchronous code as well as the option of promise chains?</span></p><div id="__MailbirdStyleContent" style="font-size: 10pt;font-family: arial"><div style="font-size: 13.3333px">For example, take the following code snippet:</div><div style="font-size: 13.3333px"><h2></h2><div class="highlight" style="background: rgb(248, 248, 248);"><pre style="line-height: 16.6667px;">async <span style="color: rgb(0, 128, 0); font-weight: bold;">function</span> asyncFunction() {
  <span style="color: rgb(0, 128, 0); font-weight: bold;">return</span> <span style="color: rgb(0, 128, 0); font-weight: bold;">new</span> Promise((resolve, reject) <span style="color: rgb(102, 102, 102);">=></span> {
    someAsync(<span style="color: rgb(186, 33, 33);">'data'</span>, (err, data) <span style="color: rgb(102, 102, 102);">=></span> {
      <span style="color: rgb(0, 128, 0); font-weight: bold;">if</span> (err) {
        reject(err); <span style="color: rgb(0, 128, 0); font-weight: bold;">return</span>;
      }
      resolve(data);
    });
  }); 
}</pre></div></div><div style="font-size: 13.3333px">This seems to be so very confusing for anybody new studying this language, almost everyone I talk to gets stuck up on some part of it.  Wouldn't it be so very beautiful if we could just do:</div><div style="font-size: 13.3333px"><h2></h2><div class="highlight" style="background: rgb(248, 248, 248);"><pre style="line-height: 16.6667px;">async <span style="color: rgb(0, 128, 0); font-weight: bold;">function</span> asyncFunction() {
someAsync(<span style="color: rgb(186, 33, 33);">'data'</span>, (err, data) <span style="color: rgb(102, 102, 102);">=></span> {
async <span style="color: rgb(0, 128, 0); font-weight: bold;">return</span> <span style="color: rgb(188, 122, 0);">[</span>err, data<span style="color: rgb(188, 122, 0);">]</span>
})
}</pre></div></div><div style="font-size: 13.3333px">When we call this with the `await` keyword, we simply `await` a return.  No special promises or extra keywords needed, everything works as you would expect it to.  This also has the benefit of shortening our required code from 10 lines to 5 lines, removing a significant proportion of boilerplate code.  </div><div style="font-size: 13.3333px"><h2></h2><div class="highlight" style="background: rgb(248, 248, 248);"><pre style="line-height: 16.6667px;">async <span style="color: rgb(0, 128, 0); font-weight: bold;">function</span> asyncFunction() {
<span style="color: rgb(0, 128, 0); font-weight: bold;">let</span> <span style="color: rgb(188, 122, 0);">[</span>err, data<span style="color: rgb(188, 122, 0);">]</span> <span style="color: rgb(102, 102, 102);">=</span> await asyncFunction()
}</pre></div></div><div style="font-size: 13.3333px">Some interesting counterpoints to consider from the #node.js channel on freenode</div><div style="font-size: 13.3333px"> - "Doesn't this just add complexity to the specification?"</div><div style="font-size: 13.3333px">   + Yes, it does mean that people who wish to implement Javascript will have to spend longer implementing await/async.  However, in my opinion it's a better solution that forcing everyone who wishes to use async/await to also learn how to use `new Promise()` and what the `reject()` and `resolve()` do.  Due to how often you have to deal with asynchronous code in Javascript, often people come across this issue very early on in learning the language, making is as easy as adding an extra `async` before your return statement seems like an acceptable exchange.</div><div style="font-size: 13.3333px"> - "Why not just automatically promisify functions using a library like bluebird?"</div><div style="font-size: 13.3333px">   + Similar to the previous question, I honestly feel that forcing people to learn the API for yet another library in order to be able to do such a simple task is much more taxing than in this method.</div><div style="font-size: 13.3333px"> - "I just don't like the async return"</div><div style="font-size: 13.3333px">   + Originally it was just a return, but a friend pointed out this ran into issues that it would simply return from the last function.  What I thought would be much easier was some sort of keyword that makes it return from the async function, instead of any other functions.  To me, `async` came naturally, but this is just my first suggestion on the future of Javascript, and I'd be interested to know if you have any better suggestions.</div></div><div class="mb_sig"></div></div>