【发布时间】:2020-05-02 02:41:25
【问题描述】:
假设我有以下代码:
new Promise(res => res(1))
.then(val => console.log(val))
我可以像这样使用async/await 实现相同的目标:
let func = async () => {
let val = await new Promise(res => res(1))
console.log (val)
}
func()
我将async/await 代码放在函数中只是因为您必须在异步函数中才能使用await。
我想知道的:为什么要执行此规则?只是做会有什么问题
let val = await new Promise(res => res(1))
console.log (val)
是await 导致当前作用域暂停执行的原因,因此强制你将async/await 代码放在异步函数的特殊作用域内会阻止JS 暂停所有其余代码的执行?
【问题讨论】:
-
await导致封闭函数转换为 Promise。为避免意外,该语言要求封闭函数通过声明自己async来声明此行为可以接受。任何函数之外的代码都没有要转换的封闭函数。即使有,也没有人会去await它,所以执行永远不会恢复。 -
Re "
await导致封闭函数转换为 Promise":我不太理解。在上面的示例中,我认为val只是设置为等于一个承诺,并且封闭函数不返回任何内容。以何种方式成为承诺? -
你有双胞胎here吗?部分代码示例是相同的。主题以相同的方式开始。问题发布得非常及时。问题的总体主题不同,但非常相关。也许学生一起工作?只是好奇。
-
您应该建议您的同事支持这个问题,而不是自己提出问题。它将社区工作集中在一个地方,避免浪费资源。
标签: javascript asynchronous promise async-await es6-promise