AngularJS execution order with '$ q' - Chaining Promises

Work on the following approach:

$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 Questions:

1) If, for example, it’s checkTokenOnlinenot in order, I don’t want to perform other functions, how can I exit (exit, break, whatever, ..) at this moment?

2) How to install some of them in parallel, and some of them are serial?

3) How can I transfer data between them?

4) How can I make the following dependency dependency on her previous result?

+4
source share
1 answer

You ask how to chain in promises.

3) How can I transfer data between them?

4) How can I make the next function depend on its previous result?

( ) :

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 , , (, , ,..) ?

, throw. .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) , ?

, promises. $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.

-.


+6

Source: https://habr.com/ru/post/1620448/


All Articles