javascript - 如何在coffeescript或javascript中创建等待队列?或另一种方法

标签 javascript asynchronous coffeescript faye

我的应用程序的用途:

  1. 异步传输信息(这是一款 cometd 风格的应用程序,我使用的是 Faye)。
  2. 附加到轮播。
  3. 显示 7 秒。
  4. 重复步骤 (2)。

我的问题是: 如果我在数据到达时立即将数据附加到传送带,它将覆盖当前显示(忽略 7 秒)。

我在做什么: 尝试在 CoffeeScript 中构建一个“等待队列”,以便当新数据到达时它会排队,7 秒后该行上的第一个元素将其弹出并追加。我尝试使用 setTimeout 但它不起作用,因为它是异步的。

示例:

line = []
# the second parameter is the callback function when a new data arrives
faye.subscribe 'my/channel/', (data) -> 
  appendEl = (el) ->
    $('.my-container').append(el)
    line.slice(0,1)
  line.push(data)
  # I think this could work if timeout could block, like sleep()
  # So when new data arrives it will get in line
  my_time = setTimeout(appendData(data), 7000)
  if line.empty?
    clearTimeout(my_time)

我不知道这是否是最好的方法,这是我的第一个流式传输实时数据的应用程序。

最佳答案

您可以通过以下两件事来多次间隔地执行某件事。

  • 将 setTimeout 与函数一起使用,函数会自行调用 setTimeout

  • 将 setInterval 与函数结合使用

你的问题怎么样,你只需要在外部作用域中添加一些变量并使用它,比如

var pipe = []

faye.subscribe('my/channel', function(data) {
   pipe.push(data)
})


setTimeout(appendData, 7000)

function appendData() {
   if (pipe.length) {
      var item = pipe.shift()
      $('.my-container').append(...)
   }
}

关于javascript - 如何在coffeescript或javascript中创建等待队列?或另一种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16601897/

相关文章:

javascript - BlueImp 文件上传插件无法正常工作

javascript - Fabricjs:用图像图案填充 svg

javascript - Rails 实时删除元素

Javascript - 将日期转换为 float 的简单方法,与 SQL Server 相同

javascript - 如何获取触发弹出窗口的 JavaScript 代码?

c# - 有没有办法结合 LINQ 和异步

java - 页面更改时更改 fragment 内容,ViewPager

python - 如何限制Twisted中的同时连接数

coffeescript - 安装 Coffee-script-source -v '1.6.3' 时捆绑安装抛出错误

javascript - "OR"中 "IF"条件的正确语法是什么?