Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Nodejs, nie czekam na zakończenie zapytania Redis przed kontynuowaniem wykonywania

Mówisz, że plik 2/3 to "taka sama zawartość", ale nie znajdują się w jednym krytycznym obszarze. Zgodnie z dokumentacją Bluebird dla promisifyAll (patrz http://bluebirdjs.com/docs/api/promise.promisifyall.html), ta funkcja tworzy ...Async wersja każdej podstawowej funkcji w kliencie Redis. Dzwonisz do hmgetAsync w pierwszym przypadku, ale dzwonisz tylko do hmget w innych.

Jest to ważne, ponieważ używasz wzorca asynchronicznego, ale ze strukturą kodu nieasynchroniczną. W pliku 2/3 ustawiasz result1 wewnątrz asynchronicznego wywołania zwrotnego, ale następnie zwracaj je pod każdym wywołaniem, zanim wywołanie mogłoby powrócić.

Masz dwie możliwości:

1:Możesz przekonwertować plik2/3/etc na w pełni tradycyjny wzorzec, przekazując wywołanie zwrotne oprócz klienta redis:

module.exports = function(redisclient, callback){

Zamiast zwracać result1 , wtedy wywołasz wywołanie zwrotne z następującą wartością:

if(redisValue == 'test value'){
    callback(null, "success");
} else {
    callback("failed", null);
}

2:Możesz przekonwertować plik2/3/..N, aby był oparty na Promise, w takim przypadku nie musisz promisifyAll(require(...)) je - możesz po prostu require() ich. Taki wzór może wyglądać tak:

module.exports = function(redisclient){
    return redisclient.hmgetAsync("testdata", "text1");
};

Jest to znacznie prostsza i czystsza opcja, a jeśli będziesz ją kontynuować, zobaczysz, że prawdopodobnie możesz nawet wyeliminować wymaganie() i po prostu wykonać hmgetAsync w pliku 1 z odpowiednimi danymi zwróconymi przez Cassandrę. Ale trudno to stwierdzić, nie widząc konkretnych potrzeb aplikacji. W każdym razie wzorce oparte na obietnicy są na ogół znacznie krótsze i czystsze, ale nie zawsze lepsze – ich używanie JEST umiarkowane. To Twoja decyzja, w którą stronę idziesz — albo zadziała.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nowicjusz aplikacji czasu rzeczywistego - Node.JS + Redis lub RabbitMQ -> klient/serwer jak?

  2. Jak przekonwertować datę Redis na R

  3. Dlaczego SQLite jest szybszy niż Redis w tym prostym teście?

  4. Sprawdzanie, czy wartość już istnieje na liście Redis

  5. Połączenie WebSocket z adresem <URL> nie powiodło się:Błąd podczas uzgadniania WebSocket:Nieoczekiwany kod odpowiedzi:521