Javascript。异步功能的执行顺序

时间:2020-06-18 14:44:09

标签: javascript async-await

就在现在,我与团队负责人进行了讨论,我对他的话有些怀疑,正在寻求专业人士的帮助。

例如,我们有三个异步功能

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。 如果有关系,请详细解释原因。

1 个答案:

答案 0 :(得分:2)

异步功能仍然同步运行,直到第一个await 。因此,如果您在实际的异步操作之前进行了一些长时间运行的准备,则顺序确实很重要。另外,如果异步任务正在访问共享资源(例如,它们正在锁定同一数据库),则命令可能会影响任务可以并行运行的程度(尽管这不在JS的范围内) 。在给定的情况下,我看不到同步代码/共享资源(bandband除外,但这应该无关紧要),所以它不重要。要给出一个绝对的答案,请对电话进行混洗(6个组合,所以工作量不大)并对其进行度量