Redis
 sql >> база данни >  >> NoSQL >> Redis

Nodejs, без да чака заявката на Redis да завърши, преди да продължи с изпълнението

Казвате, че file2/3 са "едно и също съдържание", но не са в една критична област. Съгласно документацията на Bluebird за promisifyAll (вижте http://bluebirdjs.com/docs/api/promise.promisifyall.html), тази функция създава ...Async версия на всяка основна функция в клиента Redis. Извиквате hmgetAsync в първия си случай, но извиквате само hmget във вашите други.

Това е важно, защото използвате асинхронен модел, но с неасинхронна кодова структура. Във файл 2/3 задавате result1 вътре в асинхронно обратно извикване, но след това го върнете под всяко повикване, преди повикването да е възможно да се върне.

Имате два избора:

1:Можете да конвертирате file2/3/etc в напълно традиционен модел, като подадете обратно извикване в допълнение към клиента redis:

module.exports = function(redisclient, callback){

Вместо да връща result1 , тогава ще извикате обратното извикване с тази стойност:

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

2:Можете да конвертирате file2/3/..N да бъде базиран на Promise, в който случай не е необходимо да promisifyAll(require(...)) тях - можете просто require() тях. Такъв модел може да изглежда така:

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

Това е много по-проста и по-чиста опция и ако продължите с нея, можете да видите, че вероятно бихте могли дори да премахнете require() и просто да направите hmgetAsync във файл1 с подходящи данни, върнати от Касандра. Но е трудно да разберете, без да видите нуждите на вашето конкретно приложение. Във всеки случай моделите, базирани на Promise, обикновено са много по-кратки и по-чисти, но не винаги по-добри – има умерени разходи за производителност за използването им. От вас зависи кой път ще тръгнете - и двете ще работят.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Манипулатор на грешка в Spring Redis

  2. Изтичането на RedisTemplate не работи

  3. Redis набор срещу хеш

  4. 2 подхода за проследяване на онлайн потребители с Redis. Кой е по-бърз?

  5. Пример за използване на socket.io-redis