rb6*_*612 5 javascript promise async-await
我似乎可以在文档或相关资源中的任何地方找到一点,那就是当 JS 命中关键字时,关于调用函数和事件循环的过程是什么await。
这里\xe2\x80\x99s 的规格说明如下:
\n\n\n\n\n\xc2\xa0await 表达式会导致异步函数执行暂停,直到 \xc2\xa0a Promise 得到解决(即被履行或被拒绝),并在履行后恢复异步函数的执行。恢复时,await\xc2\xa0 表达式的值是已完成的\xc2\xa0Promise 的值。
\n
这一切都有道理,但是暂停到底是什么意思呢?该函数是否立即返回给调用者,然后当正在等待的\xe2\x80\x99s 的承诺解决时,它和异步方法的其余部分会被添加到微任务队列中进行处理吗?我知道这async/await是 Promise API 的语法糖,所以我\xe2\x80\x99m 假设这就是发生的情况,但我想确保我\xe2\x80\x99m 真正理解\xe2\x80\x9cmagic\ xe2\x80\x9d 当await达到an 时发生。
从我读到的内容来看,这似乎是 xe2x80x99 在 C# 中所做的,但我不太确定它如何转换为 JS。
\n正如你所说,它将其余功能放入微任务中,并继续主功能。
然后,当承诺解决时,它会将该任务排队,以便执行异步部分。
帮助我理解它的是将 async/await 转换为 Promise 语法,然后就清楚了。
例如:
async function doSomthing() {
someSync();
const result1 = await someAsync();
const result2 = await someAsync2();
return result1 + result2;
}
Run Code Online (Sandbox Code Playgroud)
“转换”为:
function doSomthing() {
someSync();
return someAsync().then(result1 => {
return someAsync2().then(result2 => {
return result1 + result2;
});
});
}
Run Code Online (Sandbox Code Playgroud)
您可以看到doSomthing立即返回了承诺。
| 归档时间: |
|
| 查看次数: |
777 次 |
| 最近记录: |