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

Vòng lặp for trong redis với các yêu cầu không đồng bộ nodejs

Bạn có hai vấn đề chính.

  1. phoneNumber của bạn biến sẽ không như bạn muốn. Điều đó có thể được khắc phục bằng cách thay đổi thành .forEach() hoặc .map() lặp lại mảng của bạn vì điều đó sẽ tạo phạm vi hàm cục bộ cho biến hiện tại.

  2. Bạn đã tạo ra một cách để biết khi nào tất cả các hoạt động không đồng bộ được thực hiện. Có rất nhiều câu hỏi / câu trả lời trùng lặp chỉ ra cách thực hiện điều đó. Bạn có thể muốn sử dụng Promise.all() .

Tôi đề xuất giải pháp này để tận dụng những lời hứa mà bạn đã có:

function getContactList(contacts) {
    var contactList = {};
    return Promise.all(contacts.filter(utils.isValidNumber).map(function(phoneNumber) {
        return db.client().get(phoneNumber).then(function(reply) {
            // build custom object
            constactList[phoneNumber] = reply;
        });
    })).then(function() {
        // make contactList be the resolve value
        return contactList;
    });
}

getContactList.then(function(contactList) {
    // use the contactList here
}, funtion(err) {
    // process errors here
});

Đây là cách hoạt động của nó:

  1. Gọi cho contacts.filter(utils.isValidNumber) để lọc mảng thành chỉ các số hợp lệ.
  2. Gọi .map() để lặp lại qua mảng đã lọc đó
  3. return db.client().get(phoneNumber) từ .map() callback để tạo một mảng các lời hứa.
  4. Sau khi nhận được dữ liệu cho số điện thoại, hãy thêm dữ liệu đó vào contactList tùy chỉnh của bạn đối tượng (về cơ bản đây là một hiệu ứng phụ của .map() vòng lặp.
  5. Sử dụng Promise.all() trên mảng các lời hứa được trả về để biết khi nào chúng hoàn tất.
  6. Tạo contactList đối tượng mà chúng tôi đã xây dựng là giá trị phân giải của lời hứa được trả về.
  7. Sau đó, để gọi nó, chỉ cần sử dụng lời hứa được trả về với .then() để có kết quả cuối cùng. Không cần thêm đối số gọi lại khi bạn đã có lời hứa rằng bạn có thể quay lại.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Hiệu suất của Redis vs Disk trong ứng dụng bộ nhớ đệm

  2. Redis Sentinel

  3. Tại sao dữ liệu được lưu trữ bằng các khóa lạ trong Redis khi sử dụng Jedis với Spring Data?

  4. Cách sử dụng jackson thay vì JdkSerializationRedisSerializer trong mùa xuân

  5. Làm thế nào để giao tiếp giữa các dynos Web và Worker với Node.js trên Heroku?