我的应用程序做什么:


异步传输信息(这是一种彗星风格的应用程序,使用Faye即时通讯)。
附加到旋转木马。
显示7秒钟。
重复步骤(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/

10-09 20:13