title: async/await implicitly returns promise?
body: <p>I read that async functions marked by the <code>async</code> keyword implicitly return a promise:</p>
  
  <pre><code>async function getVal(){
   return await doSomethingAync();
  }
  
  var ret = getVal();
  console.log(ret);
  </code></pre>
  
  <p>but that is not coherent...assuming <code>doSomethingAsync()</code> returns a promise, and the await keyword will return the value from the promise, not the promise itsef, then my getVal function <em>should</em> return that value, not an implicit promise.</p>
  
  <p>So what exactly is the case? Do functions marked by the async keyword implicitly return promises or do we control what they return?</p>
  
  <p>Perhaps if we don't explicitly return something, then they implicitly return a promise...?</p>
  
  <p>To be more clear, there is a difference between the above and</p>
  
  <pre><code>function doSomethingAync(charlie) {
      return new Promise(function (resolve) {
          setTimeout(function () {
              resolve(charlie || 'yikes');
          }, 100);
      })
  }
  
  async function getVal(){
     var val = await doSomethingAync();  // val is not a promise
     console.log(val); // logs 'yikes' or whatever
     return val;  // but this returns a promise
  }
  
  var ret = getVal();
  console.log(ret);  //logs a promise
  </code></pre>
  
  <p>In my synopsis the behavior is indeed inconsistent with traditional return statements. It appears that when you explicitly return a non-promise value from an <code>async</code> function, it will force wrap it in a promise.
  I don't have a big problem with it, but it does defy normal JS.</p>