JS 要发起100个异步请求提交数据,有没有方案能分批次提交,比如每次处理5条,再发起下一批?

JavaScript09

JS 要发起100个异步请求提交数据,有没有方案能分批次提交,比如每次处理5条,再发起下一批?,第1张

用一个全局变量来统计正在发起的请求数量,比如说第一批发起五个异步请求,这个变量就设为5,然后在每个请求的回调函数中不管成功与否均把这个变量-1,如果变量为0,就说明5个请求均调用完毕了,这样就可以继续发起下一批5个请求,并把变量重新设为5……以此类推,直到全部完成

方案1:针对支持html5 webworker的现代浏览器方案:。

代码1.你的大量计算,放到一个js文件中。如下:

//job.js

onmessage =function (evt){

  //do massive job.在这里你进行大量耗时的计算过程。

  postMessage( data )//将计算结果的数据发送会主线程

}

你的页面代码:

<!DOCTYPE HTML>

<html>

<head>

 <meta http-equiv="Content-Type" content="text/html charset=utf-8"/>

 <script type="text/javascript">

//WEB页主线程

var worker =new Worker("job.js") //创建一个Worker对象并向它传递将在新线程中执行的脚本的URL

 worker.postMessage('开始计算')

 worker.onmessage =function(evt){//接收worker传过来的数据函数

   console.log(evt.data)//输出worker发送来的数据,这里就获取到了大量计算的结果。

 }

 </script>

 </head>

 <body></body>

</html>

方案2:对于不支持WebWorker线程的浏览器。

可以考虑分批处理。即是说创造一个间隔定时器setInterval。

每隔一小段时间,处理大量数据中的一部分。

这样就可以避免大量计算导致浏览器卡死。

大致代码如下(这里是简单的例子。具体情况具体分析。):

假设我们要计算1000万个数据的和。

var jobData =  []//假设是一个数组。里面有1000万个数据。

function sliceJob(){

    var num = (jobData.length / 100) + 1//把任务数据划分为100份。

    var portion = 100000//每份有10万个数字。

    var addition = 0//这里用来保存最后的结果。一开始是0;

    var intv = setInterval(function(){

        if(num--){

            //然后每一份结果。

            additoin += every

        } else {

            计算最后一份,然后输出结果。

            alert('最终结果是:', addition)

            window.clearInterval(intv)

        }

    }, 50)

}

此外。jQuery的deferred对象无法实现你的要求。

因为deferred对象的目的是为了串行处理异步过程。

但是异步过程在执行的过程中,如果耗时过长,仍然会阻塞浏览器线程,导致浏览器不可操作(卡死)。

唯一的一个例外是$.ajax。$.ajax方法也会返回一个Deferred对象。但是由于该异步过程是用的XMLHttpRequest。而xhr默认是异步执行的,相当于另起一个线程,因此不会阻塞浏览器县城。

使用string对象的split()方法可以处理。

var yourString=“12,25,24,234,234,”

var result=yourString.split(",")

stringObject.split(separator,howmany)

<script>

var ss = '1,e,2r,drf,dsfds,fdsfwf,'

var msg = ss.substring(0, ss.lastIndexOf(','))

alert(msg)

</script>

代码块

JavaScript 可以分批地组合起来。

代码块以左花括号开始,以右花括号结束。

代码块的作用是一并地执行语句序列。

JavaScript 语句通常以一个语句标识符为开始,并执行该语句。

语句标识符是保留关键字不能作为变量名使用。

通常要在每行语句的结尾加上一个分号。大多数人都认为这是一个好的编程习惯,而且在 web 上的 JavaScript 案例中也常常会看到这种情况。

以上内容参考:百度百科-JavaScript 语句