método de instancia y método estático de promesa

descripción general de la promesa

introducir

Promise es una de las características importantes de ES6

La solución tradicional para la programación asíncrona es usar funciones de devolución de llamada, pero esto conducirá a un anidamiento profundo y un infierno de devolución de llamada, por lo que otra solución para prometer programación asíncrona será más poderosa.

tres estados

  • estado inicial pendiente ( pendiente ), ni honrado ni rechazado
  • cumplida significa que la operación se completó con éxito
  • rechazado ( rechazado ) significa que la operación falló.

características

  • Los objetos de Promesa pendiente se cumplen con un valor o se rechazan con un motivo (error) Cuando ocurre una de estas situaciones, alineamos el procesamiento relevante con el método de la promesa y luego se llamará al programa
  • Promise.prototype.theny Promise.prototype.catchlos métodos devuelven promesas, por lo que pueden encadenarse

Métodos de promesa de tres instancias

entonces() método

  • entonces es la función de devolución de llamada cuando cambia el estado de la instancia, el primer parámetro es la función de devolución de llamada del estado resuelto y el segundo parámetro es la función de devolución de llamada del estado rechazado
  • El método then devuelve una nueva instancia de Promise, por lo que las promesas se pueden escribir en cadenas.
promise.then(result => {
    
    ···})

método de captura

Cuando ocurre una excepción, se requiere el método catch para capturarla.

promise.then(result => {
    
    ···}).catch(error => {
    
    ···})

método finalmente()

El método se utiliza para especificar la operación que se realizará independientemente del estado final del objeto Promise

promise.then(result => {
    
    ···}).catch(error => {
    
    ···}).finally(() => {
    
    ···});

método estático de promesa

método de resolución

El método devuelve un objeto analizado con el valor dado. El valor dado tiene las siguientes situaciones:Promise

  • Si el valor es una promesa, se devolverá la promesa.
  • El parámetro no es un objeto con un método then(), o no es un objeto en absoluto, Promise.resolve() devolverá un nuevo objeto Promise con un estado de resuelto
  • Cuando no hay ningún parámetro, devuelve directamente un objeto Promise en estado resuelto

rechazar () método

El método Promise.reject(motivo) también devuelve una nueva instancia de Promise cuyo estado es rechazado

const p = Promise.reject('出错了')

等同于
const p = new Promise((resolve, reject) => reject('出错了'))
p.then(null, function (s) {
    
    console.log(s)})
//出错了Promise.reject()方法的参数,会原封不动地变成后续方法的参数

cualquier () método

Toma un Promiseobjeto iterable, y tan pronto como uno de ellos promisetiene éxito , devuelve el que ha tenido éxito promise. Si ninguno de los iterables promisetiene éxito (es decir, promisestodos fallan/rechazan), devuelve promise una AggregateErrorinstancia del tipo y falla, que es una Errorsubclase y se usa para agrupar errores individuales. Esencialmente, este enfoque Promise.all()es el opuesto.

const pErr = new Promise((resolve, reject) => {
    
    
  reject("总是失败");
});

const pSlow = new Promise((resolve, reject) => {
    
    
  setTimeout(resolve, 500, "最终完成");
});

const pFast = new Promise((resolve, reject) => {
    
    
  setTimeout(resolve, 100, "很快完成");
});

Promise.any([pErr, pSlow, pFast]).then((value) => {
    
    
  console.log(value);
  // pFast fulfils first
})

Método todo()

  1. El método recibe la entrada de un tipo iterable de promesa (Nota: Array, Map y Set pertenecen al tipo iterable ES6) y devuelve solo una Promiseinstancia

    const p = Promise.all([p1, p2, p3]);
    

    El estado de instancia p está determinado por p1, p2, p3, que se puede dividir en dos casos:

    1. Solo cuando se cumplan los estados de p1, p2 y p3, se cumplirá el estado de p. En este momento, los valores devueltos de p1, p2 y p3 forman una matriz y la pasan a la función de devolución de llamada de p .
    2. 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

método allSettled

Promise.all entrará en estado fallido cuando falle cualquier solicitud

Dado que una sola Promesa ingresa al estado rechazado, el resultado de Promise.all() ingresará inmediatamente al estado rechazado, de modo que al ingresar al estado rechazado a través de Promise.all(), la Promesa de origen aún puede estar en estado pendiente, por lo que que todas las Promesas no se pueden obtener El tiempo de cumplimiento.

El método estático Promise.allSettled() esperará a que todas las Promesas de origen entren en el estado cumplido o rechazado, para garantizar que no haya conflictos de tiempo.

método de carrera

Este método también envuelve múltiples instancias de Promise en una nueva instancia de Promise

const p = Promise.race([p1, p2, p3]);
  1. Siempre que una instancia entre p1, p2 y p3 cambie de estado primero, el estado de p cambiará en consecuencia
  2. El valor de retorno de la primera instancia de Promise cambiada se pasa a la función de devolución de llamada de p

Azúcar sintáctico Async/Await

PromiseAzúcar sintáctico agregado en ES8 async awaitpara manejar la asincronía con más gracia.

asyncPuede existir solo, y la función declarada con esta palabra clave devuelve un objeto Promesa.

async funtion add(){
    
    
    return 1
}
add()
add() instanceof Promise // true

awaitNo puede existir solo, debe usarse asyncen conjunto.

function sub() {
    
    
    await 1
}
// 这个方法定义就不满足语法的,会如下报错
// Uncaught SyntaxError: await is only valid in async function

async awaitHaga que el procesamiento asíncrono sea más elegante

let fs = require('fs')

var  gen = async function() {
    
    

    const f1= await readFile('files/a.txt');//封装一个promise对象
    console.log(f1)
    const f2=  await readFile('files/b.txt');
    console.log(f2)
    const f3=  await readFile('files/c.txt');
    console.log(f3)
  
  };


  var readFile=function(path){
    
    
     return  new Promise((resolve,reject)=>{
    
    
        fs.readFile(path,'utf-8',function(err,data){
    
    
            if(!err){
    
    
          
             resolve(data)
            }else{
    
    
              reject(err)
            }
            
         });
      })
   
}


  
var obj = gen();

Supongo que te gusta

Origin blog.csdn.net/weixin_43183219/article/details/124318663
Recomendado
Clasificación