sql >> Databáze >  >> NoSQL >> Redis

Smyčka For v redis s asynchronními požadavky nodejs

Máte dva hlavní problémy.

  1. Vaše phoneNumber proměnná nebude taková, jakou chcete. To lze opravit změnou na .forEach() nebo .map() iteraci vašeho pole, protože to vytvoří rozsah lokální funkce pro aktuální proměnnou.

  2. Vytvořili jste způsob, jak zjistit, kdy jsou všechny asynchronní operace hotové. Existuje mnoho duplicitních otázek/odpovědí, které ukazují, jak na to. Pravděpodobně budete chtít použít Promise.all() .

Navrhoval bych toto řešení, které využívá sliby, které již máte:

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

Funguje to takto:

  1. Zavolejte contacts.filter(utils.isValidNumber) filtrovat pole pouze na platná čísla.
  2. Zavolejte .map() iterovat přes toto filtrované pole
  3. return db.client().get(phoneNumber) z .map() zpětné volání k vytvoření řady slibů.
  4. Po získání dat pro telefonní číslo přidejte tato data do svého vlastního contactList objekt (toto je v podstatě vedlejší efekt .map() smyčka.
  5. Použijte Promise.all() na vrácené řadě slibů, abyste věděli, kdy budou všechny hotové.
  6. Vytvořte contactList objekt, který jsme vytvořili, bude rozhodovací hodnotou vráceného slibu.
  7. K jejímu volání pak stačí použít vrácený slib s .then() získat konečný výsledek. Není třeba přidávat argument zpětného volání, když už máte příslib, že se můžete vrátit.


  1. Průnik dvou nebo více seřazených množin

  2. MongoDB bind_ip nebude fungovat, pokud nebude nastaveno na 0.0.0.0

  3. Mongoose 'statické' metody vs. 'instanční' metody

  4. MongoDB jako úložiště souborů