angularjs - page - title angular 6



Orden de ejecución AngularJS con `$ q`-Chaining Promises (1)

El siguiente enfoque funciona:

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

1) Si, por ejemplo, checkTokenOnline no está bien, no quiero ejecutar las funciones de descanso, ¿cómo puedo salir (salir, interrumpir, lo que sea, ..) en este momento?

2) ¿Cómo puedo configurar algunos de ellos en paralelo y otros en serie?

3) ¿Cómo puedo transferir datos entre ellos?

4) ¿Cómo puedo hacer que la siguiente función dependa de su resultado anterior?


Estás preguntando cómo encadenar funciones en promesas.

3) ¿Cómo puedo transferir datos entre ellos?

4) ¿Cómo puedo hacer que la siguiente función dependa de su resultado anterior?

Devolver datos (o una promesa) para la siguiente función en la cadena :

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) Si, por ejemplo, checkTokenOnline no está bien, no quiero ejecutar las funciones de descanso, ¿cómo puedo salir (salir, interrumpir, lo que sea, ..) en este momento?

Para rechazar una promesa, haga que su función arroje un error. La cadena omitirá todos los métodos .then hasta que proporcione un controlador de errores.

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) ¿Cómo puedo configurar algunos de ellos en paralelo y otros en serie?

Para hacer que dos funciones se ejecuten en paralelo, haga dos promesas. Use $q.all para esperar a que ambos se completen.

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;

Tenga en cuenta que $q.all no es resistente . Si alguna promesa arroja un error, se .then método .then y solo el primer error irá al método .catch .

La regla general para la programación funcional es siempre devolver algo .

Enlaces útiles





angular-promise