javascript - Best way to handle nested Promises (bluebird) -
इस सवाल का पहले से ही एक उत्तर है: < / P>
- 14 उत्तरों
मेरे पास निम्न वादा श्रृंखला है नीचे और यह काफी गड़बड़ (प्रत्येक
_create * समारोह एक वादा देता है) प्रतीत होता है: <पूर्व>
वापस नए वादा (कार्य (समाधान, अस्वीकार) {_this.database लेनदेन (कार्य (टी) {_this._createExternalAccount (भुगतान, टी) .then (फ़ंक्शन (बाहरी एसीसी) {वापसी _this._createExternalTransaction (बाहरी खाता, भुगतान, टी)। तब (फ़ंक्शन (बाहरी ट्रांसेक्शन) {वापसी _this._createAddress (बाहरी खाता, भुगतान , टी)। तब (कार्य (पता) {वापसी _this._createTransaction (पता, भुगतान, टी)। तब (कार्य (लेनदेन) {वापसी _this._createGatewayTransaction (बाहरी लेनदेन, लेनदेन, भुगतान, टी)। तब (कार्य (गेटवे लेनदेन) {T.commit (); संकल्प (पुलपैकेज जाहिर); }); }); }); }); })। आतंक (फ़ंक्शन (पुल भुगतान) {टी। रोलबैक (); अस्वीकार करें (पुल भुगतान);}); });
मुझे पता है कि वादात्मक कार्य हैं I
all () और
join () जैसा इस्तेमाल कर सकते हैं, लेकिन ये समवर्ती कार्यों को चलाने के लिए प्रतीत होते हैं जो मैं ऐसा नहीं कर सकता क्योंकि कुछ तालिकाओं के लिए पहले से बने तालिकाओं से खेतों की आवश्यकता होती है मैं उम्मीद कर रहा हूं कि मेरे लिए कुछ ऐसा करने के लिए निम्नलिखित तरीके हैं, लेकिन मुझे ये पता नहीं लग सकता है कि कैसे: <प्री>
Promise.all (_this._createExternalAccount (भुगतान, टी), _this._createExternalTransaction (बाहरी खाता, भुगतान, टी), _this._createAddress (बाहरी खाता, भुगतान, टी))। तब (फ़ंक्शन (बाहरी खाता, बाहरी प्रथा, पता) {// do logic});
मुझे पूरा यकीन है कि आप क्या कह रहे हैं। < Ol>
यदि आप कई तरह के वादे को क्रमशः चलाने के लिए चाहते हैं, तो
ध्यान देने योग्य बात यह है कि यह वादे के एक सरणी नहीं है यह कार्य की एक सरणी है जो वादा करता है। ऐसा इसलिए है क्योंकि वादों को तत्काल निष्पादित किया जाता है ताकि जब तक आप इसकी आवश्यकता न हो जाएं तब तक आप वादा नहीं बना सकते।
यदि आप उन्हें सरणी में नहीं रखना चाहते हैं, हालांकि सामान्य चीज केवल श्रृंखला है उन्हें सामान्य रूप से।
फिर से एक गुच्छा बनाने के लिए सबसे आसान तरीका वापसी वादा करता है तो आप बस
var p = firstFunctionThatReturnsApromise ()। तब (secondFunctionThatReturnsApromise)। तब (तीसरे कार्यप्रणालीटेटरअल्पप्रदर्शन)। तब (चौथा फ़ंक्शनटेट्रेट्सअर्थवाद)
आप उन्हें बस घोंसला कर सकते हैं के रूप में आसानी से <पूर्व>
फ़ंक्शन AOuterFunctionThatReturnsApromise () {var p = firstFunctionThatReturnsApromise ()। तब (secondFunctionThatReturnsApromise)। तब (thirdFunctionThatReturnsApromise)। तब (चौथाफ़ंक्शन TATReturnsApromise); वापसी पी; };
अब बाहरी फ़ंक्शन सिर्फ एक ऐसा कार्य है जो वादा लौटाता है जिसका मतलब है कि आप आंतरिक फ़ंक्शन के समान पैटर्न लागू कर सकते हैं।
यदि पाठ्यक्रम इनलाइन हो सकता है <पूर्व>
var p = function () {नया वचन (रिज़ल्ट, अस्वीकार) {DoSomethingAsync (फ़ंक्शन (गलती, परिणाम) {if (err) {reject ();} else {resol (परिणाम);} ;}}}}। फिर (कार्य () (नया कार्यवाही वापस करें (अस्वीकार, अस्वीकार करें) {DoSomethingAsync (कार्य (त्रुटि, परिणाम) {if (err) {अस्वीकार (गलती);} और {हल (परिणाम);}; }}}} फिर (कार्य () {var err = DoSomethingNotAsync (); अगर (गलती) {वापसी Promise.reject (err);} else {वापसी Promise.resolve ();}}); < / प्री>
आदि ...
Comments
Post a Comment