javascript - माता-पिता के वादे के भीतर से वादों की एक सरणी को हल करना




promise bluebird (2)

घोंसले के वादों पर यह मेरा पहला शॉट है। मैं ब्लूबर्ड लाइब्रेरी का उपयोग कर रहा हूं, लेकिन मुझे लगता है कि यह विचार सभी वाद पुस्तकालयों के लिए समान है।

एक उच्च स्तर पर, मैं यही करने की कोशिश कर रहा हूं:

myService.getSomeData(url)
 .then((data) => {
   myOtherService.getMoreData(data.uniqueId)
   .then((thisDataIsAnArray) => {
      //loop over the data above and do something
   });
 });

getMoreData() एक्स सर्विस कॉल करने और परिणाम को एक्स एलीमेंट में लंबे समय तक स्टोर करने वाला है। यह वह जगह है जहां मैं खोना शुरू कर देता हूं, इसमें मुझे यकीन नहीं है कि इस पद्धति को कैसे तैयार किया जाए और मुझे इससे क्या लौटना चाहिए। मैंने ब्लूबर्ड के Promise.all और Promise.map में कुछ स्टैब्स लिए हैं, लेकिन मैं भड़क रहा हूं और सोचा था कि मैं सुझाव देना चाहूंगा।


पहली बार यह वादा किया गया था कि मैंने अपने दिमाग को पूरी तरह से बदल दिया था। मुझे लगता है कि ब्लूबर्ड का प्रलेखन आम उपयोग के मामलों को अलग करने वाला एक काफी खराब काम है, लेकिन मैं इसके बारे में नहीं जाऊंगा क्योंकि (ए) मुझे ब्लूबर्ड पसंद है, और (बी) मेरे पास डॉक्स को अपडेट करने का समय नहीं है।

मुझे लगता है कि Promise.map आपके परिदृश्य के लिए सही बात है।

myService.getSomeData(url)
    .then((data) => 
    {
        return myOtherService.getMoreData(data.uniqueId)
    })
    .map((item) =>
    {
        return doSomethingWithData(item);
    })
    .then((results) =>
    {
        // do something with the result array. 
    });

परिणामों के साथ आप क्या करना चाहते हैं, इसके आधार पर, जहाँ मैंने प्रयोग किया है। आप भी .reduce , या .each उपयोग कर सकते हैं। ध्यान दें कि .each उस वादे से वापसी मूल्य को संशोधित नहीं करता है, जिस पर वह जंजीर है, इसलिए ब्लूबर्ड डॉक्स में "केवल साइड-इफेक्ट्स के लिए उपयोग करें" टिप्पणी।

उदाहरण और स्थिर तरीकों के बीच का अंतर, ज़ाहिर है, कि स्थैतिक के साथ आपको सरणी की आपूर्ति करनी होगी, जैसे कि Promise.map(array, (item) => {})

इसके अलावा, जैसा कि @jib ने कहा - हमेशा अपने कॉलबैक के अंदर एक मान लौटाएं। यह आपको लाइन के नीचे बहुत दर्द से बचाएगा।


वादे केवल कॉल वैल्यू हैं जो आप कॉलबैक को देते हैं, बजाय कॉलबैक को फ़ंक्शन में जाने के। जब तक आप उन सभी को वापस नहीं करते हैं, कॉलबैक के लिए चेन के लिए, या उनकी सभी त्रुटियों को पकड़ने का कोई तरीका नहीं है।

इसके अलावा, सभी के बाद से वापसी। तत्काल आपके पास एक और वादा है। इससे चीजें चपटी हो जाती हैं।






bluebird