`$ Q` के साथ AngularJS निष्पादन आदेश-चेनिंग वादे



angular-promise (1)

दृष्टिकोण काम करता है:

$q.when()
        .then(checkCookieToken)         // check if cookie already exists e.g. in cookie
        .then(setHeader)                // set Header with REST-Token e.g from cookie
        .then(checkTokenOnline)         // if not OK logout
        .then(getMenu)                  // if previous OK get navigation menu
        .then(getDataResource)          // set ngResource
        .then(getData);                 // and query it

4 प्रश्न:

1) अगर उदाहरण के लिए checkTokenOnline ठीक नहीं है, तो मैं बाकी कार्यों को निष्पादित नहीं करना चाहता, मैं इस बिंदु पर कैसे छोड़ सकता हूं (बाहर निकलें, तोड़ें, जो, ..)?

2) मैं उनमें से कुछ को कैसे समानांतर और उनमें से कुछ को सेट कर सकता हूं?

3) मैं उनके बीच डेटा कैसे स्थानांतरित कर सकता हूं?

4) मैं अपने पिछले परिणाम से निम्नलिखित फ़ंक्शन को कैसे निर्भर बना सकता हूं?


आप पूछ रहे हैं कि वादों में चेन कैसे काम करें।

3) मैं उनके बीच डेटा कैसे स्थानांतरित कर सकता हूं?

4) मैं निम्नलिखित फ़ंक्शन को अपने पिछले परिणाम पर कैसे निर्भर कर सकता हूं?

श्रृंखला में अगले समारोह के लिए रिटर्न डेटा (या एक वादा):

var p2 = p1.then ( function (data) {
     var nextData = someFn(data);
     return nextData;
});

var p3 = p2.then ( function (nextData) {
     var nextData2 = someOtherFn(nextData);
     return nextData2;
});

//return for further chaining
return p3;

1) अगर उदाहरण के लिए checkTokenOnline ठीक नहीं है, तो मैं बाकी कार्यों को निष्पादित नहीं करना चाहता, मैं इस बिंदु पर कैसे छोड़ सकता हूं (बाहर निकलें, तोड़ें, जो, ..)?

किसी वादे को अस्वीकार करने के लिए, आपके फ़ंक्शन में त्रुटि है। जब तक आप एक त्रुटि हैंडलर की आपूर्ति नहीं करते, तब तक श्रृंखला सभी .then तरीकों को छोड़ देगी।

var p2 = p1.then ( function checkTokenOnline (response) {
             if ( isBadFn(response) {
                 throw error;
             } else {
                 return nextData;
             }
   }) .then ( someFn 
    ) .then ( someOtherFn
    ) .catch ( function (error) {
          // someFn and someOtherFn skipped
          //log error
          throw error;
   });

 //return for further chaining
 return p2;

2) मैं उनमें से कुछ को कैसे समानांतर और उनमें से कुछ को सेट कर सकता हूं?

दो कार्यों को समानांतर में चलाने के लिए, दो वादे करें। दोनों को पूरा करने के लिए प्रतीक्षा करने के लिए $q.all का उपयोग करें।

var p1 = $q.when ( fn1() );
var p2 = $q.when ( fn2() );

var p3 = $q.all ( [p1, p2] );

var p4 = p3.then ( function (responseList) {
      var response1 = responseList[0];
      var response2 = responseList[1];
      return something;
}). catch ( function (error) {
      //log error
      throw error;
});

//return for further chaining
return p4;

ज्ञात हो कि $q.all लचीला नहीं है। यदि कोई भी वादा त्रुटि देता है, .then .catch विधि को छोड़ दिया जाएगा और केवल पहली त्रुटि .catch विधि पर जाएगी।

कार्यात्मक प्रोग्रामिंग के लिए अंगूठे का नियम हमेशा कुछ वापस करना है

उपयोगी कड़ियाँ






angular-promise