Javascript 返回等待的值会返回承诺吗?(es7异步/等待)
它记录Javascript 返回等待的值会返回承诺吗?(es7异步/等待),javascript,async-await,ecmascript-2017,Javascript,Async Await,Ecmascript 2017,它记录Promise{}; 为什么它会返回一个承诺而不是'somestring' 我正在使用Babel ES7预设来编译这个 异步函数返回承诺。为了做你想做的事,试试这样的方法 const ret = () => new Promise(resolve => setTimeout( () => resolve('somestring'), 1000)); async function wrapper() { let someString = await ret();
Promise{}
;
为什么它会返回一个承诺而不是'somestring'
我正在使用Babel ES7预设来编译这个 异步函数返回承诺。为了做你想做的事,试试这样的方法
const ret = () => new Promise(resolve => setTimeout( () => resolve('somestring'), 1000));
async function wrapper() {
let someString = await ret();
return someString;
}
console.log( wrapper() );
您还可以在wrapper()
上等待,就像来自另一个异步函数上下文的其他承诺一样
wrapper().then(someString => console.log(someString));
如果希望异步函数立即返回值,可以使用Promise.resolve(theValue) 在我看来,async Wait关键字还需要一个,resolve 如果能写信就好了 返回“你好” 或者只是
async waitForSomething() {
const somevalue = await waitForSomethingElse()
console.log(somevalue)
return Promise.resolve(somevalue)
}
因为它是异步函数。这就是异步函数和普通函数之间的区别。我认为您可以从异步函数内部获得异步/等待的好处。如果您
console.log(someString)
在wrapper()
函数内或在任何其他async
函数内,您将获得someString
值。@estus那么为什么在等待它输出正确值之后,日志someString
会立即输出正确值?@Gobliins:不,它是ES2017(ES8)的一部分@FelixKling你是对的,我错误地假设ES2017==ES7你确定第二个例子吗?我得到语法错误,它必须在一个异步函数内。与此同时,我发现您可以从异步方法返回一个变量,这与使用变量调用resolve的作用相同
async waitForSomething() {
const somevalue = await waitForSomethingElse()
console.log(somevalue)
return Promise.resolve(somevalue)
}
resolve 'hello'