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

Làm thế nào để gọi hàm sau khi hoàn thành các hàm không đồng bộ bên trong vòng lặp?

Tôi sử dụng lời hứa của Bluebird ở đây. Lưu ý rằng mục đích của mã khá rõ ràng và không có lồng ghép.

Đầu tiên, hãy phân biệt cuộc gọi hgetall và ứng dụng khách -

var client = Promise.promisifyAll(client);

Bây giờ, hãy viết mã với các lời hứa, .then thay vì gọi lại nút và tổng hợp bằng .map . What .then không là báo hiệu một hoạt động không đồng bộ đã hoàn tất. .map nhận một loạt các thứ và ánh xạ tất cả chúng vào một hoạt động không đồng bộ giống như cuộc gọi hgetall của bạn.

Lưu ý cách Bluebird thêm (theo mặc định) một Async hậu tố cho các phương thức promisifed.

exports.awesomeThings = function(req, res) {
    // make initial request, map the array - each element to a result
    return client.lrangeAsync("awesomeThings", 0, -1).map(function(awesomeThing) {
       return client.hgetallAsync("awesomething:" + awesomeThing);
    }).then(function(things){ // all results ready 
         console.log(things); // log them
         res.send(JSON.stringify(things)); // send them
         return things; // so you can use from outside
    });
};


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. cách lưu trữ một đối tượng phức tạp trong redis (sử dụng redis-py)

  2. F # Nhiều thuộc tính CLIMutable DataContract

  3. Redis thiết lập TTL trên hSet Keys

  4. Cách sửa các phím Redis Serialized với Java

  5. delay_jobs vs resque vs beantalkd?