返回一个等待的值返回一个 Promise? (es7 异步/等待)
Posted
技术标签:
【中文标题】返回一个等待的值返回一个 Promise? (es7 异步/等待)【英文标题】:Returning an awaited value returns a Promise? (es7 async/await) 【发布时间】:2017-02-10 06:29:43 【问题描述】:const ret = () => new Promise(resolve => setTimeout( () => resolve('somestring'), 1000));
async function wrapper()
let someString = await ret();
return someString;
console.log( wrapper() );
它记录Promise <pending>
;
为什么它返回一个 Promise 而不是 'somestring'
?
我正在使用 Babel ES7 预设来编译它。
【问题讨论】:
因为它是异步函数。这就是异步函数和普通函数的区别。 我认为您可以从异步函数内部获得异步/等待的好处。如果您在wrapper()
函数内或任何其他 async
函数内 console.log(someString)
,您将获得 somestring
值。
@estus 那么为什么在等待someString
输出正确的值后立即记录呢?
@Gobliins:不,它是 ES2017 (ES8) 的一部分。
@FelixKling 你是对的,我错误地认为 ES2017 == ES7
【参考方案1】:
如果你希望你的异步函数立即返回一个值,你可以使用 Promise.resolve(theValue)
async waitForSomething()
const somevalue = await waitForSomethingElse()
console.log(somevalue)
return Promise.resolve(somevalue)
IMO async await 关键字需要多一个,解决
写出来就好了 返回解决'你好'
或者只是
resolve 'hello'
【讨论】:
好吧,同时我发现你可以从异步方法中返回一个变量,这与使用变量调用解析相同【参考方案2】:异步函数返回承诺。为了做你想做的事,试试这样的事情
wrapper().then(someString => console.log(someString));
您也可以在 wrapper()
上等待,就像其他异步函数上下文中的其他承诺一样。
console.log(await wrapper());
【讨论】:
你确定那里的第二个例子?我得到了语法错误。 @JakeWilson 它必须在异步函数中。 developer.mozilla.org/en-US/docs/Web/javascript/Reference/…以上是关于返回一个等待的值返回一个 Promise? (es7 异步/等待)的主要内容,如果未能解决你的问题,请参考以下文章