Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Mẫu tốt nhất để xử lý vòng lặp không đồng bộ trong Node.js

Đoạn mã trên có thể không làm những gì bạn mong đợi. Bạn đang khởi động từng .get() theo trình tự, nhưng chúng có thể không gọi lại theo trình tự - vì vậy kết quả có thể truyền ra theo bất kỳ thứ tự nào. Nếu bạn muốn truyền trực tuyến kết quả thay vì thu thập chúng trong bộ nhớ, bạn cần phải .get() theo trình tự.

Tôi nghĩ rằng thư viện không đồng bộ của caolan làm cho việc này dễ dàng hơn rất nhiều. Đây là một cách bạn có thể sử dụng để sắp xếp từng mục theo trình tự (cảnh báo, chưa được kiểm tra):

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

Nếu bạn không quan tâm đến đơn đặt hàng, chỉ cần sử dụng async.forEach() thay vào đó.

Nếu bạn không muốn thu thập kết quả và muốn chúng trả về theo trình tự, bạn có thể sử dụng async.map() như thế này (cảnh báo, cũng chưa được kiểm tra):

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. Redis thiết lập TTL trên hSet Keys

  2. Có giới hạn nào về số lượng đối số mà các lệnh redis như ZADD hoặc HMGET có thể xử lý không?

  3. Redis Nhiều người đăng ký

  4. Hàng đợi redis của Laravel 5.5 quá chậm

  5. Làm cách nào để chạy Redis trên Windows?