【发布时间】:2022-01-24 04:35:23
【问题描述】:
我正在学习javascript中的async和await,我在玩async和await时对我写的以下函数的执行顺序有点困惑:
const promiseA = new Promise((resolutionFunc, rejectionFunc) => {
setTimeout(() => resolutionFunc(666), 5000);
});
const test = async () => {
await promiseA.then((val) =>
console.log("asynchronous logging has val:", val)
);
};
const testTwo = () => {
test();
console.log("immediate logging");
};
testTwo();
我的理解是在函数
为什么console.log("immediate logging");这行代码首先被执行?
另一方面,如果我写
const testTwo = async () => {
await test();
console.log("immediate logging");
};
一切正常
【问题讨论】:
-
当您同步调用测试时,异步操作会被放入所谓的事件循环。随后的所有同步操作都将在事件循环中异步操作的未决决议之前运行。所以你会看到同步日志......然后事件循环运行承诺解决方案。如果你使用await,则代码在解析后运行
-
看来你已经知道为什么在
test()的异步日志之前执行了:因为你没有await呢? -
在
test函数的第一行加上console.log("Starting test");对理解有帮助吗?
标签: javascript async-await promise