循环中,调用异步接口获取数据
问题描述:for循环中,异步调用后端接口无效(同时执行所有任务,导致页面卡死)
提示:循环不能是异步的,for循环是同步任务,内部的异步任务会在for循环执行完成后执行
解决方法:循环中使用递归。使用递归函数在事件循环的单独轮次中执行迭代,在事件循环的单独轮次中执行递归,不会导致调用栈溢出。
()事件循环的每个轮次中调用其他事件处理程序的调用栈最初是空的)
这个问题涉及事件循环:
1、所有同步任务都在主线程上执行,形成一个“执行栈”
2、主线程之外,还存在一个“任务队列”,只要异步任务有了结果,就在“任务队列”中放置一个事件
3、一旦执行栈的所有同步任务完成,系统就读取“任务队列”对应异步任务,结束等待状态,进入执行栈,开始执行(执行异步回调)
4、主线程不断重复(3)步骤