2015-07-28 15 views
7

mam abonament, po wywołaniu ready(), wykonuje szereg aktualizacjach ciągnięcie danych z innych kolekcji:Meteor: subskrypcja aktualizacji asynchroniczny

Meteor.publish('foo', function() { 
    this.ready() 

    // Several times: 
    var extraData = OtherCollection.findOne(...) 
    this.changed(..., extraData) 
}) 

Jak mogę uruchomić te aktualizacje asynchronicznie? Każda aktualizacja uzyskuje dostęp do bazy danych, wykonuje niektóre obliczenia i wywołuje changed w subskrypcji.

Muszę również uruchomić kod po zakończeniu wszystkich aktualizacji (resynchronizacja).

Odpowiedz

4

Po prostu zapisz obsługę publikowania i użyj go później!

var publishHandler; 

Meteor.publish('foo', function() { 
    publishHandler = this; 

    //Do stuff... 
}); 

//Later, retrieve it and do stuff with it 
doSomeAsync(Meteor.bindEnvironment(function callback(datum) { 
    publishHandler.changed(/* ... */, datum); 
})); 

//Alternatively with Meteor.setTimeout: 
Meteor.setTimeout(function callback() { 
    publishHandler.changed(/* ... */, 'someData'); 
}, 
10000); 

Ponieważ jest to po prostu w końcu obiekt JS można również zapisać go w tablicy lub zrobić cokolwiek ci pasuje.
Asynchronicznie.
Heroicznie.