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

Най-добрият модел за работа с асинхронен цикъл в Node.js

Горният код може да не направи това, което очаквате. Стартирате всеки .get() последователно, но може да не се обаждат последователно – така че резултатите могат да се излъчват в произволен ред. Ако искате да предавате поточно резултатите, вместо да ги събирате в паметта, трябва да .get() последователно.

Мисля, че асинхронната библиотека на caolan прави много от това по-лесно. Ето един начин, по който можете да го използвате, за да получите всеки елемент в последователност (предупреждение, нетествано):

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(']');
            }
        });
    });
});

Ако не ви интересува поръчката, просто използвайте async.forEach() вместо това.

Ако нямате нищо против да съберете резултатите и искате те да се връщат последователно, можете да използвате async.map() като това (предупреждение, също непроверено):

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. Go JSON декодирането е много бавно. Какъв би бил по-добрият начин да го направите?

  2. Redis Sentinels с TLS

  3. Redis :Как да задам един ключ равен на стойността на друг ключ?

  4. Как да съхраня двоичен обект в redis с помощта на node?

  5. Хиредис чака съобщение