Await in async functions works for any thenable
- Published at
- Updated at
- Reading time
- 1min
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.
Join 5.4k readers and learn something new every week with Web Weekly.