Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Untuk loop dalam redis dengan permintaan asinkron nodejs

Anda memiliki dua masalah utama.

  1. phoneNumber . Anda variabel tidak akan seperti yang Anda inginkan. Itu bisa diperbaiki dengan mengubah ke .forEach() atau .map() iterasi array Anda karena itu akan membuat cakupan fungsi lokal untuk variabel saat ini.

  2. Anda telah membuat cara untuk mengetahui kapan semua operasi asinkron selesai. Ada banyak pertanyaan/jawaban duplikat yang menunjukkan bagaimana melakukannya. Anda mungkin ingin menggunakan Promise.all() .

Saya menyarankan solusi ini yang memanfaatkan janji yang sudah Anda miliki:

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
});

Begini cara kerjanya:

  1. Hubungi contacts.filter(utils.isValidNumber) untuk memfilter larik ke angka yang valid saja.
  2. Panggil .map() untuk beralih melalui array yang difilter itu
  3. return db.client().get(phoneNumber) dari .map() panggilan balik untuk membuat serangkaian janji.
  4. Setelah mendapatkan data untuk nomor telepon, tambahkan data tersebut ke contactList khusus Anda objek (ini pada dasarnya adalah efek samping dari .map() lingkaran.
  5. Gunakan Promise.all() pada deretan janji yang dikembalikan untuk mengetahui kapan semuanya selesai.
  6. Buat contactList objek yang kita buat menjadi nilai penyelesaian dari janji yang dikembalikan.
  7. Lalu, untuk memanggilnya cukup gunakan janji yang dikembalikan dengan .then() untuk mendapatkan hasil akhir. Tidak perlu menambahkan argumen panggilan balik ketika Anda sudah memiliki janji bahwa Anda bisa kembali.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mengonfigurasi Apache Reverse Proxy Untuk Hosting Laravel Echo Server Saat Produksi

  2. Mencari solusi antara menyetel banyak penghitung waktu atau menggunakan antrian tugas terjadwal

  3. docker-compose:koneksi ditolak antar container, tetapi layanan dapat diakses dari Host

  4. Bagaimana mengonfigurasi redis-cluster saat menggunakan spring-data-redis 1.7.0.M1

  5. Redis memasukkan rusak, atau menyortir dengan aneh?