Await in async functions works for any thenable

Published at
Updated at
Reading time
1 min

This post is part of my Today I learned series in which I share all my learnings regarding web development.

async/await makes it possible to write asynchronous JavaScript that looks synchronous. It helps to fight the "callback hell". But what statements can we actually use in combination with await?

ล ime Vidas and Axel Rauschmayer had a really interesting Twitter conversation recently. So let's look at some snippets.

(async () => { console.log(await 'foo'); })(); // 'foo'
(async () => { console.log(await 5); })();     // 5

It turns out that you can really await anything. I didn't know that. This is one of these tiny JS details I really like to discover. If you await something that's not a promise it will return the actual value.

let thenable = {
  then: (fn) => {
    fn('jup')
  }
};

(async () => { console.log(await thenable); })() // 'jup'

And... it doesn't have to be a promise. A thenable (anything that includes a function called then) works also fine. So thanks ล ime and Axel for having these conversations in public.

Related Topics

See null comment.