Выстрелить событие, когда что-то добавляется в очередь или массив в Javascript - PullRequest
0 голосов
/ 21 февраля 2012

Я пишу программу на javascript, CoffeeScript и jQuery, если быть точным. У меня есть одна функция, которая добавляет вещи в очередь по мере их поступления из сети. Я хочу, чтобы когда-то добавлялось в эту очередь, чтобы событие срабатывало, чтобы другая функция начала удалять элементы из очереди. Что было бы хорошим способом сделать это?

Ответы [ 2 ]

4 голосов
/ 21 февраля 2012

Примерно так может работать:

var Queue = {
    listeners: [],
    objs: [],
    add: function(item) {
        objs.push(item);
        $.each(listeners, function() {
            listeners.added(item);
        });
    }
};
0 голосов
/ 21 февраля 2012

Или вы можете унаследовать от Array и просто переопределить нужные вам функции (constructor и push)

class Queue extends Array
  constructor : (args...) ->
    @_listeners = []
    super(args...)

  onAdd : (fn) ->
    @_listeners.push fn

  push : (args...) ->
    fn(args...) for fn in @_listeners
    super(args...)

# Use it like this : 

q = new Queue
q.onAdd (args...) -> console.log("l1", args)
q.onAdd (args...) -> console.log("l2", args)

q.push(32)
q.push(52)

console.log '-'

for v in q
  console.log v

# Output : 
#
# l1 [ 32 ]
# l2 [ 32 ]
# l1 [ 52 ]
# l2 [ 52 ]
# -
# 32
# 52
...