我的应用程序的用途:
- 异步传输信息(这是一款 cometd 风格的应用程序,我使用的是 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/