1

我的应用程序做什么:

  1. 异步传输信息(这是一个彗星风格的应用程序,我使用 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)

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

4

1 回答 1

0

有两件事你可以用间隔做很多次。

  • 将 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(...)
   }
}
于 2013-05-21T18:48:16.877 回答