初学者异步/等待问题

时间:2019-03-06 13:37:37

标签: javascript async-await

我试图了解异步/等待。请找到两个带有问题的屏幕截图作为附件。

问题1:等待释放或拒绝。它是否正确? enter image description here enter image description here 谢谢你的回答。 问候

1 个答案:

答案 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