答案 0 :(得分:0)
您的代码的两个版本几乎相等。使用async
关键字声明的任何函数都将返回诺言。
作为一个例子,以下函数尽管看上去与Promise无关,但仍会返回Promise:
async function helloWorld() {
return "Hello World";
}
我们可以如下验证
> helloWorld().then(result => console.log(result));
Hello World
正如async
关键字所建议的那样,我们正在指示JavaScript运行时它应该异步运行该函数。由于执行类似let result = helloWorld()
之类的操作时,函数的调用者需要立即收到结果,因此result
包含一个Promise,该Promise最终将解析为helloWorld()
的返回值(如果{ {1}}引发错误。
因此,在您的代码中,最高版本(helloWorld()
)和最低版本(result = await new Promise...
)之间几乎没有区别:在两种情况下,您的函数result = new Promise...
将返回最终解决请求数据或在请求失败时拒绝的Promise。
有一点细微的差别。在执行asyncData()
的代码的最高版本中,第23和24行将仅在6-22行之后执行,因此您将在看到“返回承诺”之前看到“ Rest调用成功”。在执行result = await new Promise...
的代码的底部版本中,第23行将立即执行,因此您将首先看到“ Rest调用成功”。
产生这种差异的原因是,result = new Promise...
语句类似于在await
块中的await
语句之后放置每一行。下面的示例对此进行了说明。
then