What my app do:
What my problem is: If i append the data to the carrousel right in the moment that arrives it will overwrite the current display (ignoring the 7 secs).
What i am doing: Trying to build a 'waiting line' in coffeescript so when the new data arrives it gets in line and after 7 secs the first element on the line pop it and append. I tried to use setTimeout but it didn't work because it is asych.
An example:
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)
I dont know if it is the best approach, this is my first app that streams live data.
There is two things you can do to do something many times with intervals.
use setTimeout with function, which will call setTimeout for itself
use setInterval with the function
What about your problem you just need to add some variable in the outer scope and use it, something like
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(...)
}
}