Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 返回等待的值会返回承诺吗?(es7异步/等待)_Javascript_Async Await_Ecmascript 2017 - Fatal编程技术网

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'