为了账号安全,请及时绑定邮箱和手机立即绑定

在不阻塞UI的情况下迭代数组的最佳方法

在不阻塞UI的情况下迭代数组的最佳方法

千巷猫影 2019-07-12 09:46:44
在不阻塞UI的情况下迭代数组的最佳方法我需要迭代一些大型数组,并通过API调用将它们存储在主干集合中。什么是最好的方法来做到这一点,而不让循环导致接口变得没有响应?由于返回的数据非常大,Ajax请求的返回也会阻塞。我认为我可以将其拆分,并使用setTimeout使其以较小的块异步运行,但是否有更简单的方法来做到这一点。我认为一个网络工作者会很好,但是它需要改变一些保存在UI线程上的数据结构。我尝试使用它来执行Ajax调用,但是当它将数据返回给UI线程时,接口仍然没有响应。提前谢谢
查看完整描述

3 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

这是一个演示执行这个“异步”循环。它将迭代“延迟”1ms,在此延迟内,它为UI提供了做某事的机会。

function asyncLoop(arr, callback) {
    (function loop(i) {

        //do stuff here

        if (i < arr.Length) {                      //the condition
            setTimeout(function() {loop(++i)}, 1); //rerun when condition is true
        } else { 
            callback();                            //callback when the loop ends
        }
    }(0));                                         //start with 0}asyncLoop(yourArray, function() {
    //do after loop  });//anything down here runs while the loop runs

有其他的选择,比如网络工作者目前拟议的setImmediate哪个是AFAIK论IE,加上前缀。


查看完整回答
反对 回复 2019-07-12
  • 3 回答
  • 0 关注
  • 407 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信