异步并在javascript中等待

幽灵骑士

我是初学者,JS正在经历的过程中asyncawait遇到了以下示例:

const get = async () => {
    const y = await "hello";
    console.log(y);
}

console.log("start");
get();
console.log("end");

O / P

start
end 
hello

但是根据我的理解await,直到promise可用,程序才会阻止当前程序的执行,那么为什么在上面的示例中这种情况没有发生?我的理解不正确或缺少其他概念吗?

jfriend00

当某个async功能到达功能中的第一个await时,它将立即中止该功能的进一步执行,然后立即从该功能返回一个承诺。调用方收到该承诺并继续执行。因此,当前函数被挂起,而不是调用方或JS引擎的其余部分被挂起。

因此,在您的代码中:

const get=async ()=>{
    const y=await "hello"
    console.log(y)
}

console.log("start")
get()
console.log("end")

这是事件的顺序:

  1. 记录“开始”
  2. 开始执行 get()
  3. 到达第一个 await
  4. 暂停get()功能的进一步执行
  5. 退回承诺 get()
  6. 调用代码继续执行并记录“结束”
  7. 当调用代码返回事件循环时,await由于没有实际的等待等待,get()函数结束执行,并且记录“ hello”,因此结束

因此,await仅中止当前函数的执行,使其立即返回promise,然后调用代码继续执行。稍后,当您等待的语句解析(通常是一个promise)并且解释器返回到事件循环时,该函数将继续执行,直到下一个await或到达其返回值为止,然后返回到已解析的值它最初返回的承诺的一部分,并且该承诺得到解决(您的代码正在忽略)。

注意,await通常应与承诺一起使用,而不要与常量一起使用。尽管它不会对await不是承诺的东西造成错误,但是它并没有做任何有用的事情。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章