Does a async function which returns Promise<void> have an implicit return at the end of a block?

Gala picture Gala · May 27, 2017 · Viewed 23.7k times · Source
public async demo(): Promise<void> {
    // Do some stuff here
    // Doing more stuff
    // ... 
    // End of block without return;
}

Is a new Promise<void> returned implicitely at the end of the block in TypeScript/ES6?

Example for boolean type:

class Test {

    public async test(): Promise<boolean> {
        return true;
    }

    public main(): void {

        this.test().then((data: boolean) => {

            console.log(data);

        });

    }

}

new Test().main();

This prints true to the console because a return inside of a async function creates a new Promise and calls resolve() on it with the returned data. What happens with a Promise<void>?

Answer

basarat picture basarat · May 29, 2017

What happens with a Promise

Same thing with a function that returns void. A void function returns undefined. A Promise<void> resolves to an undefined.

function foo(){}; console.log(foo()); // undefined
async function bar(){}; bar().then(res => console.log(res)); // undefined