我是初学者,JS
正在经历的过程中async
,await
遇到了以下示例:
const get = async () => {
const y = await "hello";
console.log(y);
}
console.log("start");
get();
console.log("end");
O / P
start
end
hello
但是根据我的理解await
,直到promise
可用,程序才会阻止当前程序的执行,那么为什么在上面的示例中这种情况没有发生?我的理解不正确或缺少其他概念吗?
当某个async
功能到达该功能中的第一个await
时,它将立即中止该功能的进一步执行,然后立即从该功能返回一个承诺。调用方收到该承诺并继续执行。因此,当前函数被挂起,而不是调用方或JS引擎的其余部分被挂起。
因此,在您的代码中:
const get=async ()=>{
const y=await "hello"
console.log(y)
}
console.log("start")
get()
console.log("end")
这是事件的顺序:
get()
await
get()
功能的进一步执行get()
await
由于没有实际的等待等待,get()
函数结束执行,并且记录“ hello”,因此结束因此,await
仅中止当前函数的执行,使其立即返回promise,然后调用代码继续执行。稍后,当您等待的语句解析(通常是一个promise)并且解释器返回到事件循环时,该函数将继续执行,直到下一个await
或到达其返回值为止,然后返回到已解析的值它最初返回的承诺的一部分,并且该承诺得到解决(您的代码正在忽略)。
注意,await
通常应与承诺一起使用,而不要与常量一起使用。尽管它不会对await
不是承诺的东西造成错误,但是它并没有做任何有用的事情。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句