Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

नोडज अतुल्यकालिक अनुरोधों के साथ रेडिस में लूप के लिए

आपके पास दो मुख्य मुद्दे हैं।

  1. आपका phoneNumber परिवर्तनीय वह नहीं होगा जो आप चाहते हैं। इसे .forEach() . में बदलकर ठीक किया जा सकता है या .map() आपके सरणी का पुनरावृत्ति क्योंकि यह वर्तमान चर के लिए स्थानीय फ़ंक्शन स्कोप बनाएगा।

  2. आपने यह जानने का एक तरीका बनाया है कि सभी async ऑपरेशन कब किए जाते हैं। बहुत सारे डुप्लिकेट प्रश्न/उत्तर हैं जो दिखाते हैं कि यह कैसे करें। आप शायद Promise.all() . का उपयोग करना चाहते हैं ।

मैं इस समाधान का सुझाव दूंगा जो आपके पहले से किए गए वादों का लाभ उठाए:

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

यहां बताया गया है कि यह कैसे काम करता है:

  1. कॉल करें contacts.filter(utils.isValidNumber) सरणी को केवल मान्य संख्याओं में फ़िल्टर करने के लिए।
  2. कॉल करें .map() उस फ़िल्टर किए गए सरणी के माध्यम से पुनरावृति करने के लिए
  3. return db.client().get(phoneNumber) .map() . से वादों की एक श्रृंखला बनाने के लिए कॉलबैक।
  4. फ़ोन नंबर के लिए डेटा प्राप्त करने के बाद, उस डेटा को अपनी कस्टम contactList . में जोड़ें ऑब्जेक्ट (यह अनिवार्य रूप से .map() . का एक साइड इफेक्ट है लूप।
  5. Promise.all() का उपयोग करें वादों के लौटाए गए सरणी पर यह जानने के लिए कि वे सब कब पूरे हो गए हैं।
  6. contactList बनाएं हमने जो वस्तु बनाई है, वह लौटाए गए वादे का संकल्प मूल्य है।
  7. फिर, इसे कॉल करने के लिए .then() . के साथ दिए गए वादे का उपयोग करें अंतिम परिणाम प्राप्त करने के लिए। कॉलबैक तर्क जोड़ने की कोई आवश्यकता नहीं है जब आपके पास पहले से ही एक वादा है कि आप बस वापस आ सकते हैं।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. रेडिस डंप पर डिफ़ॉल्ट फ़ाइल अनुमति बदलना

  2. एक रेल ऐप पर एक हैश को रेडिस में सहेजा जा रहा है

  3. रेडिस क्रम से बाहर डालना, या अजीब तरह से छाँटना?

  4. रेडिस एओएफ और टारनटूल वाल लॉग के बीच अंतर

  5. रेडिस सॉर्टेडसेट बैलेंस्ड ट्री के बजाय स्किप लिस्ट का उपयोग क्यों करता है?