javascript - nodejs js 队列运行问题
PHPz
PHPz 2017-04-11 11:23:46
[JavaScript讨论组]
var array = [1,2,3,4];
function check()
{
if(array.length > 0)
var url = array.pop();
load(url);
}}
function load(url)
{
http.get(url, function(res){
check();
)
}}

做了个简单的队列 但现在 执行一个 再执行 一个 我想批量执行100个 再执行 100个 怎么控制呢 请问

PHPz
PHPz

学习是最好的投资!

全部回复(3)
黄舟

我感觉先取出100个,然后用Promise.all 等待其全部执行完之后再取100个,应该可行.

巴扎黑

可以考虑用async模块

大家讲道理

算法伪代码:

var waiting = 0
function check() {
  while (waiting < 100 && hasNext()) {
    ++waiting
    doNext().onDone(function() {
      --waiting
      check()
    })
  }
}

check()

完整示例代码:

var queue = new Array(10000)
for (var i = 0; i < 10000; ++i)
  queue[i] = i

function hasNext() {
  return queue.length > 0
}

function doNext() {
  var onDone

  var i = queue.shift()

  function setDone(callback) {
    onDone = callback
  }
  setTimeout(function() {
    console.log(i)
    onDone()
  }, 1000)
  return { onDone: setDone }
}

var waiting = 0
function check() {
  while (waiting < 100 && hasNext()) {
    ++waiting
    doNext().onDone(function() {
      --waiting
      check()
    })
  }
}

check()

运行结果:每秒钟打印 100 个数字,按顺序,从 0 开始。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号