2016-10-01 96 views
4
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> }; 为什么它会返回一个Promise而不是'somestring'返回期待值会返回一个Promise? (es7 async/await)

我使用巴贝尔ES7预设来编译这个。

+0

因为它是异步函数。这是异步和正常功能之间的区别。 – estus

+0

我认为你可以从异步函数中获得async/await的好处。如果你在'wrapper()'函数内部或'async'函数内的'console.log(someString)',你将会得到'somestring'值。 –

+0

@estus那么为什么在等待输出正确的值之后记录'someString'呢? –

回答

5

异步函数返回承诺。为了做到你想要什么,尝试这样的事情

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

您也可以等待在wrapper()像来自另一个异步函数的上下文中的其他承诺。

console.log(await wrapper()); 
+0

你确定那里有第二个例子吗?我得到语法错误。 –

+0

@JakeWilson它必须在异步函数中。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await#Examples – afuous

2

,如果你希望你的异步函数立刻返回一个值,你可以使用Promise.resolve(theValue)

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

    return Promise.resolve(somevalue) 
} 

IMO异步等待关键字需要一个,解决

它会是很好写 回报决心“你好”

或只是

resolve 'hello'