2013-01-05 14 views
7

मैं इस तरह एक समारोह से एक वादा लौट रहा हूँ कर रहे हैं:तक प्रतीक्षा वादा और नेस्ट thens पूरा

resultPromise = dgps.utils.save(opportunity, '/api/Opportunity/Save', opportunity.dirtyFlag).then(function() { 

       self.checklist.saveChecklist(opportunity).then(function() { 

        self.competitor.save(opportunity.selectedCompetitor()).then(function ... etc. 
return resultPromise; 

चलो कहते हैं कि इसके बाद के संस्करण समारोह को बचाने कहा जाता है करते हैं।

कॉलिंग फ़ंक्शन में मैं पूरी श्रृंखला को पूरा करने के लिए प्रतीक्षा करना चाहता हूं और फिर कुछ करना चाहता हूं। मेरे कोड वहाँ इस तरह दिखता है:

var savePromise = self.save(); 
savePromise.then(function() { 
    console.log('aftersave'); 
}); 

नतीजा यह है कि 'aftersave' कंसोल के लिए भेज जबकि वादों की श्रृंखला अभी भी चल रहा है है।

पूरी श्रृंखला पूरी होने के बाद मैं कुछ कैसे कर सकता हूं?

उत्तर

7

वादे को घोंसले के बजाय, उन्हें चेन करें।

resultPromise = dgps.utils.save(opportunity, '/api/Opportunity/Save', opportunity.dirtyFlag).then(function() { 

        return self.checklist.saveChecklist(opportunity); 
       }).then(function() { 

        return self.competitor.save(opportunity.selectedCompetitor()); 
       }).then(function() { 
        // etc 
       }); 

// return a promise which completes when the entire chain completes 
return resultPromise; 
+2

क्या वहां सशर्त है तो क्या होगा? क्या आपको स्थगित वस्तु की आवश्यकता नहीं होगी? – FlavorScape

+0

यह पूछे जाने वाले प्रश्न का उत्तर नहीं है। सवाल यह था कि श्रृंखला को समाप्त करने के लिए कैसे इंतजार करना है। बस श्रृंखला में और तत्व जोड़ना एक समाधान नहीं है और अक्सर ठीक से काम नहीं करेगा। – MeanEYE

+0

@MeanEYE श्रृंखला पर 'फिर' करके अंत तक चेन के लिए टी प्रतीक्षा करें। यह समस्या हल करता है (हालांकि जैसा कि आपने देखा है, यह शाब्दिक प्रश्न का उत्तर नहीं देता है, लेकिन सवाल वास्तव में एक समस्या के बारे में था)। –

संबंधित मुद्दे