刚才和我的leader讨论了一下,对他的话有些疑问,寻求专业人士的帮助。
例如,我们有三个异步函数
const fetchViewers = async () => {
const viewers = await fetch(...);
this.setState({ viewers });
};
const fetchPolls = async () => {
const polls = await fetch(...);
this.setState({ polls });
};
const fetchRegistrants = async () => {
const registrants = await fetch(...);
this.setState({ registrants })
};
我们按照这样的顺序调用它们
const init = () => {
fetchViewers();
fetchPolls();
fetchRegistrants();
}
假设吸引观看者比其他两个花费更多的时间, 我的问题是,有什么理由将 fetchViewers 放在最后吗? 由于我们没有等待它们在 init 函数中得到解析,所以我很确定这并不重要,因为它只影响将其放入堆栈的顺序以及调用将由 DOM 制作。 如果确实重要,请更详细地解释原因。
最佳答案
异步函数仍然同步运行直到第一个await
。因此,如果您在实际的异步操作之前做了一些长时间运行的准备工作,那么顺序就很重要。此外,如果异步任务正在访问共享资源(例如,它们正在锁定同一个数据库),则顺序可能会影响任务并行运行的效果(但这超出了 JS 的范围) 。然而,在给出的情况下,我无法真正看到同步代码/共享资源(带宽除外,但这应该不重要),所以它应该不重要。要给出绝对答案,请随机排列调用(6 种组合,因此工作量不大)并测量。
关于JavaScript。异步函数的执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62452669/