Pregunta

Son los siguientes fragmentos de código equivalente?

Versión 1

function doSomething() {
  var defer = $q.defer();

  foo().then(function() {
    bar().then(function() {
      defer.resolve();
    });
  });

  return defer.promise;
}

La versión 2

function doSomething() {
  return foo().then(bar);
}
¿Fue útil?

Solución

Hay muchas diferencias entre estos dos enfoques.

La principal diferencia entre los dos fragmentos es que en version 2 su implícitamente se pasa el valor resuelto de foo directamente a bar.Además de que doSomething va a resolver lo que sea bar va a resolver, mientras que en version 1 el resultado se descarta.

Algunos otros puntos importantes realizados por Benjamín Gruenbaum:

(a) si la barra es un error de referencia 1 rechaza el interior de la promesa y 2 a los tiros.
(b) 1 requiere una referencia a $q, donde 2 es la aplicación agnóstico.
(c) la versión 1 no es una excepción segura y un rechazo será tragó donde la versión 2 se permiten .coger un rechazo.;Hay varias pequeñas diferencias.Ver stackoverflow.com/preguntas/22539815

También podríamos escribir algo como esto.
De esta manera usted no recibe el implícita pasar a través de la resueltas valor de foo a bar ( explicito ahora ), que puede ser confuso o fácilmente pasado por alto.También puede ser útil si quieres hacer algo con el resuelto valores de foo o bar antes de regresar a ellos.

function doSomething() {
  return foo().then(function(res){
     // maybe  do something with the result of foo
     return bar(res);
  }).then(function(res){
     // maybe do something with the result of bar
     return res;
  });
}

Creación manual de un diferidos objeto debe mantenerse a un mínimo y generalmente es un anti patrón.

https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns#the-deferred-anti-pattern

El principio clave que se demuestra aquí es que una promesa de que va a adoptar el estado de devolución de la promesa ( o thenable ) dentro del método resolve.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top