Javascript 节点js队列从数组返回元素

Javascript 节点js队列从数组返回元素,javascript,node.js,Javascript,Node.js,我试图在节点js中实现一个队列。我有一个包含元素的数组,我希望每1秒插入一个新的。我希望每次只从队列返回两个元素(每5秒)。我希望队列继续从剩余位置返回值。例如,我有一个数组[1,2,3,4]。我每隔2秒在数组中插入一个新元素。我每隔5秒从数组中返回2个元素。有人知道如何做到这一点吗?这是我的密码: var queue = require('queue'); var posts=["aaa","bbbb","ccc",'ddd']; var n=posts.length; function po

我试图在节点js中实现一个队列。我有一个包含元素的数组,我希望每1秒插入一个新的。我希望每次只从队列返回两个元素(每5秒)。我希望队列继续从剩余位置返回值。例如,我有一个数组
[1,2,3,4]
。我每隔2秒在数组中插入一个新元素。我每隔5秒从数组中返回2个元素。有人知道如何做到这一点吗?这是我的密码:

var queue = require('queue');
var posts=["aaa","bbbb","ccc",'ddd'];
var n=posts.length;
function populateQueue(q) {
  for (var i = 0; i < posts.length; i++) {
    (function(index) {
      q.push(function(done) {
        console.log('done', posts[index]);
        setTimeout(done, 5000);
  posts.splice(0,2);
      });
    })(i);
  }
}

function insert() {
    posts.push({"name":haiku()});
    cxc();
}


function cxc() {
populateQueue(q2);
}



setInterval(insert,2000);

var q2 = queue({concurrency: 2});
populateQueue(q2);
q2.start();


    function haiku(){

    var adjs = ["autumn", "hidden", "bitter", "misty", "silent", "empty", "dry",
  "dark", "summer", "icy", "delicate", "quiet", "white", "cool", "spring",
  "winter", "patient", "twilight", "dawn", "crimson", "wispy", "weathered",
  "blue", "billowing", "broken", "cold", "damp", "falling", "frosty", "green",
  "long", "late", "lingering", "bold", "little", "morning", "muddy", "old",
  "red", "rough", "still", "small", "sparkling", "throbbing", "shy",
  "wandering", "withered", "wild", "black", "young", "holy", "solitary",
  "fragrant", "aged", "snowy", "proud", "floral", "restless", "divine",
  "polished", "ancient", "purple", "lively", "nameless"]

  , nouns = ["waterfall", "river", "breeze", "moon", "rain", "wind", "sea",
  "morning", "snow", "lake", "sunset", "pine", "shadow", "leaf", "dawn",
  "glitter", "forest", "hill", "cloud", "meadow", "sun", "glade", "bird",
  "brook", "butterfly", "bush", "dew", "dust", "field", "fire", "flower",
  "firefly", "feather", "grass", "haze", "mountain", "night", "pond",
  "darkness", "snowflake", "silence", "sound", "sky", "shape", "surf",
  "thunder", "violet", "water", "wildflower", "wave", "water", "resonance",
  "sun", "wood", "dream", "cherry", "tree", "fog", "frost", "voice", "paper",
  "frog", "smoke", "star"];

  return adjs[Math.floor(Math.random()*(adjs.length-1))]+"_"+nouns[Math.floor(Math.random()*(nouns.length-1))];
}
var queue=require('queue');
var posts=[“aaa”、“bbbb”、“ccc”、“ddd”];
var n=立柱长度;
函数populateQueue(q){
对于(变量i=0;i
我有一个快速的答案。具体涉及您的问题,但不涉及您的代码。你必须告诉我你的代码是做什么的,否则我帮不了你。但关于你的问题,我有以下几点:

首先,设置初始队列和索引

let queue = [1, 2, 3, 4, 5],
    index = 0;
现在您必须声明两个函数,(1)将值放入数组队列的函数。在我的例子中,我让一个随机数排队

enqueue = () => {
    queue.push(Math.floor(Math.random()*10));
    console.log(queue);
}
另一个在当前索引处获取两个值,并在存储完成后将索引增加2。然后返回值

get_two_elements = () => {
    let pointed_slice = queue.slice(index, index + 2);
    index += 2;
    console.log(pointed_slice);
    return pointed_slice;
};
最后,为了让这个装置工作,你必须像这样对它们设置超时

setInterval(enqueue, 2000);
setInterval(get_two_elements, 5000);
Set interval是非阻塞的,因此两者几乎在同一时间发生,相差在纳秒和毫秒之间。这将成功地解决你的问题

为了便于参考,我在这里为您介绍了整个代码的要点:


为什么insert函数中的setTimeout(cxc,2000)是经过修改的..只是cxc(),请练习干净的编码。:)这是一条旁注,用ES6:modern javascript编写。您可以用旧的javascript(如您的样式es5)重写箭头函数和关键字。