As a thought experiment imagine the following: a way to tell the JavaScript runtime to pause the executing of code on the keyword when used on a promise and resume only once (and if) the promise returned from the function is settled:

    When the promise settles execution continues,

    • if it was fulfilled then await will return the value,

    This suddenly (and magically) makes asynchronous programming as easy as synchronous programming. Three things needed for this thought experiment are:

    • Ability to pause function execution.
    • Ability to throw an exception inside the function.

    This is exactly what generators allowed us to do! The thought experiment is actually real and so is the async/await implementation in TypeScript / JavaScript. Under the covers it just uses generators.

    where the just executes the generator function to get the generator and then use generator.next(), if the value is a promise it would +catch the promise and depending upon the result call generator.next(result) or generator.throw(error). That’s it!

    Async Await Support in TypeScript

    Async - Await has been supported by TypeScript since version 1.7. Asynchronous functions are prefixed with the async keyword; await suspends the execution until an asynchronous function return promise is fulfilled and unwraps the value from the Promise returned.
    It was only supported for target es6 transpiling directly to ES6 generators.

    TypeScript 2.1 , meaning you’ll be free to take advantage of it no matter what environment you’re using. It’s important to notice that we can use async / await with TypeScript 2.1 and many browsers are supported, of course, having globally added a polyfill for Promise.

    Let’s see this example and take a look at this code to figure out how TypeScript async / await notation works:

    You can see full example here.

    Transpiling to ES5 (—target es5)

    You can see full example .

    Note: for both target scenarios, we need to make sure our run-time has an ECMAScript-compliant Promise available globally. That might involve grabbing a polyfill for Promise. We also need to make sure that TypeScript knows Promise exists by setting your lib flag to something like “dom”, “es2015” or “dom”, “es2015.promise”, “es5”.
    We can see what browsers DO have Promise support (native and polyfilled) here.