2014-07-24 10 views
11

Wykonuję liczenie baz danych za pomocą metody serwera. Użytkownicy mogą wybrać sposób, w jaki mają wykonywać liczenie, a następnie wywołać metodę.Meteor - Anulowanie metody serwera od klienta

Mój problem polega na tym, że odliczanie może zająć trochę czasu, a użytkownik może zmienić zdanie, gdy metoda jest uruchomiona i zażądać innej liczby. Czy jest jakiś sposób, aby anulować wywoływaną metodę i uruchomić nową liczbę?

Myślałem, że this.unblock() może działać; pozwoli to na uruchomienie nowej metody, ale nie anuluje starej metody. Rozważałem także zliczanie wstępne, a następnie po prostu szukanie, ale jest zbyt wiele kombinacji selektorów.

Oto mój kod, to dość prosta:

//Server 
Meteor.methods({ 
    getFilterCount: function(oFilterSelector) { 
     return clMaBldgs.find(oFilterSelector, {}).count(); 
    } 
}); 

//Client 
Meteor.call('getFilterCount', oFilterSelector, function (error, result) { 
    //do some stuff 
}); 
+1

Dowiedziałeś się? Chciałbym też wiedzieć. Jakikolwiek sposób wyświetlić listę uruchomionych połączeń? – CFrei

+0

Niestety, nie. Jednak znalazłem tę wskazówkę w dokumentacji mongo. Jeszcze tego nie próbowałem. Może to działać w przypadku anulowania operacji db: http://docs.mongodb.org/manual/reference/method/db.killOp/ – Adam

+0

Trochę spóźniony do gry, ale wydaje się, że 'unblock' jest nadal zalecanym sposobem udać się; odwołując się do [aktualnego przewodnika Meteora] (https://guide.meteor.com/methods.html#methods-vs-rest), 3 akapit w dół. – chazsolo

Odpowiedz

0

Więcej o pracy wokół, ale jeśli miał zmienną reaktywnego (może być wpis w DB), który to status metody i w samej metodzie sprawdzasz tę flagę, gdy tylko uzyskasz status.

{ 
    _id: "some id for the method", running: true 
} 

Pseudokod dla metody

Meteor.methods({ 
    method: (_id) => { 
     status = getStatusForId(_id); 
     while(status) { 
      status = getStatusForId(_id); 
     } 
    } 
}); 

Potem go zatrzymać, po prostu zaktualizować że flaga się fałszywe i metoda przestanie tak szybko, jak to możliwe.

1

Anulowanie już wykonanej metody wywołania na serwerze z klienta nie jest możliwe.

Ale jeśli twoja metoda jest wywoływana wiele razy w krótkim odstępie czasu i zależy ci tylko na wyniku ostatniego połączenia. Możesz użyć debounce, aby opóźnić wykonanie niektórych razy. Pomoże to ograniczyć niepotrzebne połączenia z serwerem.

Powiązane problemy