¿La diferencia entre promise.all promise.race promise.allSettled? Use promise.all para lograr promise.allSettled

Referencia: Los tres hermanos .all (), .race (), .allSettled () en promise
Promise se
resumen brevemente:

1 、 promesa.todos ()

  1. El método Promise.all () acepta una matriz como parámetro, y p1, p2 y p3 son todas instancias de Promise
  2. Solo cuando se cumplan los estados de p1, p2 y p3, se cumplirá el estado de p. En este momento, los valores de retorno de p1, p2 y p3 forman una matriz, que se pasa a la función de devolución de llamada de p
  3. Siempre que se rechace uno de p1, p2 y p3, el estado de p se rechaza y el valor de retorno de la primera instancia rechazada se pasará a la función de devolución de llamada de p

2 、 promesa.raza ()

  1. Siempre que una instancia de p1, p2 y p3 cambie de estado primero, el estado de p cambiará en consecuencia. El valor de retorno de la instancia de Promise que cambia primero se pasa a la función de devolución de llamada de p

3 、 promise.allSettled ()

  1. Solo las instancias p1, p2, p3 devuelven resultados, ya sea que se cumplan o se rechacen, la instancia de empaquetado finalizará

Por lo tanto, Promise.all () no puede estar seguro de que todas las solicitudes hayan terminado. Si necesita conocer todos los resultados de todas las operaciones asincrónicas entrantes, o necesita saber si estas operaciones asincrónicas han finalizado, debe usar promise.allSettled ()

4. La diferencia entre promise.all y promise.allSettled

  1. Diferentes métodos de procesamiento correspondientes al mismo parámetro
  • Promise.allSettled () Independientemente de si la promesa en el parámetro se cumple o se rechaza, esperará a que la instancia en el parámetro devuelva el resultado, y luego la instancia del paquete terminará
  • Promise.all () irá a Promise.all ([p1, p2, p3]). Luego () método solo cuando se cumplan todas las instancias de promesa aceptadas. Siempre que una de las instancias de promesa sea rechazada, irá directamente a catch Método, y la captura solo devolverá el error de la primera promesa que se rechaza
  1. Para la propia instancia de empaquetado
  • Una vez que Promise.allSettled () tiene un resultado, la instancia de empaquetado en sí siempre se cumple
  • Promise.
  1. Estructura de datos devueltos
  • El resultado aceptado por Promise.allSettled () corresponde a la instancia de la promesa al ingresar el parámetro, y cada elemento del resultado corresponde a uno
const resolved = Promise.resolve(42);
const rejected = Promise.reject(-1);

const allSettledPromise = Promise.allSettled([resolved, rejected]);

allSettledPromise.then(function (results) {
  console.log(results);
});
// [
//    { status: 'fulfilled', value: 42 },
//    { status: 'rejected', reason: -1 }
// ]
  • Promise.all () dará como resultado el método Promise.all (). Then () solo cuando se cumplan todas las instancias de promesa de los parámetros de entrada. El resultado devuelto también corresponde a los parámetros de entrada uno a uno, y el resultado solo contiene el valor real el resultado de la resolución

5. Utilice promise.all para implementar promise.allSettled

Promise.allSettled = function(list) {
  if (list instanceof Array) {
    let res = [];
    list.forEach((i) => {
      res.push(
        new Promise(function(resolve, reject) {
          i.then((v) => {
            resolve({state:true, data: v});
          }).catch((e) => {
            reject({state: false, data: e});
          });
        })
      );
    });
    return Promise.all(res);
  }
  return Promise.reject();

Supongo que te gusta

Origin blog.csdn.net/weixin_43912756/article/details/108273275
Recomendado
Clasificación