如何获得异步,等待功能同步结果

时间:2020-01-21 16:27:50

标签: javascript asynchronous async-await

我了解了Async和Await的概念。 我尝试使用它,但没有得到想要的结果。

我的异步功能:

let get_server_resource = async () => {
    let a = await x();
    let b = await b();
    return {
        a: a, b: b
    }

}

位于另一个作用域的函数调用。

let main = async () => {

    result = await get_server_resource();
    console.log(result);
}

但是,这不起作用。如何正确利用等待和异步?

谢谢。

2 个答案:

答案 0 :(得分:1)

aysnc函数不返回值,而返回Promise

因此,除非您等待它们,否则您无法从它们那里获得价值,可以通过多种方式完成await关键字是最简单的方法,并且在异步代码中,您始终可以调用同步函数

chunks = []
 for chunk in pd.read_csv('desired_file...', chunksize = 1000):
     chunks.append(chunk)
 df = pd.concat(chunks, ignore_index = True)

这具有不阻止您的代码的优点

否则,您可以使用then方法来设置要在完成时调用的回调

async useServerData()
{

    result = await get_server_resource();
    console.log(result);
    processServerResource(result)

}
processServerResource(resource)
{
    do Something
}

一个非常糟糕的选择是声明结果超出您的承诺范围,然后继续检查是否已设置

get_server_resource().then(processServerResource);

再次,这不是推荐的解决方案

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise#Methods

答案 1 :(得分:0)

如果我正确,问题是当您调用Main()函数时。您的Main()函数实际上返回一个Promise,并且即使结果对您而言并不有趣,您也应该这样处理。 因此,从一个非异步函数中,您可以像这样调用Main:

Main()
    .then((result) => { /* ...continue */ })
    .catch(error) => { /* ...what happened if an error occurred */ });