我的应用程序做什么:
异步传输信息(这是一种彗星风格的应用程序,使用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/