JavaScript。异步函数的执行顺序

标签 javascript async-await

刚才和我的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/

相关文章:

c# - 在 async/await 中使用 ThreadStatic 变量

javascript - Bootstrap 4 : card header and navigation on one row

c# - 什么时候等待动态调用的方法?

javascript - 切换 div 时 Div 掉落

javascript - 如何使用Q和JS catch或fail来处理错误

javascript - 等待循环内的 promise

javascript - JavaScript 中的简单异步函数

javascript - 循环中的异步等待在第 370 次迭代后停止

JavaScript onsubmit PreventDefault 无法有条件地工作

javascript - forEach 内部和 forEach 之后的条件回调,但似乎没有按预期返回?