Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Returning an awaited value returns a Promise? (es7 async/await)

const ret = () => new Promise(resolve => setTimeout( () => resolve('somestring'), 1000));

async function wrapper() {
    let someString = await ret();
    return someString;
}

console.log( wrapper() );

It logs Promise { <pending> }; Why does it return a Promise instead of 'somestring'?

I'm using the Babel ES7 preset to compile this.

like image 257
bool3max Avatar asked Oct 01 '16 23:10

bool3max


2 Answers

Async functions return promises. In order to do what you want, try something like this

wrapper().then(someString => console.log(someString));

You can also await on wrapper() like other promises from the context of another async function.

console.log(await wrapper());
like image 136
afuous Avatar answered Oct 26 '22 06:10

afuous


if you want your async function to return a value immediatly you can use Promise.resolve(theValue)

async waitForSomething() {
    const somevalue = await waitForSomethingElse()
    console.log(somevalue)

    return Promise.resolve(somevalue)
}

IMO the async await keywords need one more, resolve

it would be nice to write return resolve 'hello'

or just

resolve 'hello'
like image 39
Martijn Scheffer Avatar answered Oct 26 '22 07:10

Martijn Scheffer