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

Najlepszy wzorzec do obsługi pętli asynchronicznych w Node.js

Powyższy kod może nie działać zgodnie z oczekiwaniami. Rozpoczynasz każdy .get() w kolejności, ale mogą nie oddzwaniać po kolei – więc wyniki mogą być przesyłane w dowolnej kolejności. Jeśli chcesz przesyłać strumieniowo wyniki zamiast gromadzić je w pamięci, musisz użyć .get() w kolejności.

Myślę, że biblioteka asynchroniczna caolan znacznie to ułatwia. Oto jeden ze sposobów, w jaki możesz go użyć, aby uzyskać każdy element w kolejności (ostrzeżenie, nieprzetestowane):

app.get("/facility", function(req, res) {
    rc.keys("FACILITY*", function(err, replies) {
        var i = 0;
        res.write("[");
        async.forEachSeries(replies, function(reply, callback){
            rc.get(reply, function(err, reply) {
                if (err){
                    callback(err);
                    return;
                }
                res.write(reply);
                if (i < replies.length) {
                    res.write(",");
                }
                i++;
                callback();
            });
        }, function(err){
            if (err) {
                // Handle an error
            } else {
                res.end(']');
            }
        });
    });
});

Jeśli nie zależy Ci na kolejności, po prostu użyj async.forEach() zamiast tego.

Jeśli nie masz nic przeciwko zbieraniu wyników i chcesz, aby zwracały się one w sekwencji, możesz użyć async.map() w ten sposób (ostrzeżenie, również nieprzetestowane):

app.get("/facility", function(req, res) {
    rc.keys("FACILITY*", function(err, replies) {
        async.map(replies, rc.get.bind(rc), function(err, replies){
            if (err) {
                // Handle an error
            } else {
                res.end('[' + replies.join(',') + ']');
            }
        });
    });
});


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Problem w deserializacji redis-cache do obiektów w Spring-boot

  2. Nie można uzyskać połączenia Jedis; Nie udało się uzyskać zasobu z puli

  3. Wysyłanie wiadomości do grup w Django Channels 2

  4. Pamięć podręczna Redis a bezpośrednie korzystanie z pamięci

  5. Jak przechowywać element listy w pamięci podręcznej Redis