SheepChef Blog
何時までも夢へ求めてる
SheepChef Blog

用 JavaScript 写简单队列

队列,在顺序处理大量任务的时候是非常有用的。本文介绍如何在Js中设计简单的队列处理。

设想一个情景:你需要从网络上获取数量不定的搜索内容。与此同时,你需要对返回的JSON对象进行解析,并且使用你解析完毕的数据发起一个新的请求。但是注意,我们增加一个【网络请求限制】,即你发起新请求的目标主机有访问限制,不能过于快速地发起请求。

我们如何设计这个程序呢?

用ajax异步操作+callback回调,这么写固然没什么错,但是异步操作本身执行的时序就比较复杂,我们倾向于获取内容单独写一个或一组方法,处理或发起新请求再单独写方法,且用Interval定时执行。

下面用伪代码构思一下:

var List = new Array();//这里定义一个数组类,我们作为队列使用
function GetSearchContent(){//获取搜索的内容
  while(/*...*/)  {
    //...
    List.push(data);//push方法把获取到的data推进队列尾部,这样获取内容就完全独立出来了。
    return;
  }
}
function ProcessList(){//处理列表
  if(List.length < 1){//在数组长度小于1的时候不执行
    return;
  }
  var temp = List.shift();//shift方法会返回数组的第一个对象并且删除它,会更改数组长度,有利于我们逐项处理数组对象
  //....JSON处理略过
  //....网络请求略过
  return;
}
setInterval(ProcessList(),3000);//待避定时循环

从上方的例子我们可以发现,处理和获取内容的方法互相独立,互不干涉,它们唯一的联系就是队列。一个在队列尾部追加内容,一个在队列头部删除内容,直到队列处理完毕。

可能这个写法的效率并不及回调,但是这么写的思路远比回调清晰得多,无需考虑各种复杂情况。

0 0 投票数
文章评分
感谢您一直阅读到本文的最后!
如果您觉得本文写得不错,欢迎您转发支持我们。
# # # #
首页      IT技术      用 JavaScript 写简单队列
Avatar photo

SheepChef

文章作者

Webmaster

订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论

SheepChef Blog

用 JavaScript 写简单队列
队列,在顺序处理大量任务的时候是非常有用的。本文介绍如何在Js中设计简单的队列处理。 设想一个情景:你需要从网络上获取数量不定的搜索内容。与此同时,你需要对返回的JSON对象进行…
扫描二维码继续阅读
2021-12-06