soluciones de programación asíncrona Promise

¿Por qué utilizar una promesa?

  1. diablos resolución de devolución de llamada
    Aquí Insertar imagen Descripción

    
    fs.readFile(__dirname + '/data/a.txt', (err, data)=>{
        if(!err){
            console.log(data.toString());
            fs.readFile(__dirname + '/data/b.txt', (err, data)=>{
                if(!err){
                    console.log(data.toString());
                }
                fs.readFile(__dirname + '/data/cc.txt', (err, data)=>{
                    if(!err){
                        console.log(data.toString());
                    }
                });
            });
        }
    });
    
    
  2. Soluciones petición asíncronos

concepto

¿Cuál es la promesa?

  1. promesa, la promesa. En el código, podemos entender: Estoy aquí para el compromiso promesa, durante un cierto período de tiempo te dará un resultado.
  2. Reflejada en ECMAScript 6 es un objeto contenedor, para encapsular una operación asíncrona general

Por lo tanto, lo que debe hacer en este período de tiempo?

  1. Podemos operar de forma asíncrona,
    tales como solicitar una red de datos, operación que consume tiempo, leer y escribir archivos locales, etc.

Promesa de tres estados

operación asincrónica es algo impredecible, ya sea éxito o fracasan
contenedor interno hay tres estados

  1. Pendiente: se crea instancia de objeto Promise cuando el estado inicial
  2. Cumplido: el éxito del Estado
  3. Rechazado: Estado fallido

NOTA: El estado no se puede deshacer

La práctica de leer el archivo

Promesa de crear objetos (una vez creado y ejecutado inmediatamente)

  1. Minucias 1
    cuando la operación asincrónica es el resultado del fracaso del objeto dentro del contenedor de objetos de promesa, la promesa de decir la tarea asincrónica fracasado, de hecho, el estado Pendiente dentro de la promesa cambia a Rechazado
  2. 2 minucias
    dentro Promise se dirigen entonces el estado con éxito la operación no se produce error, demostrado asíncrono, en espera de que el interior de la Promise a Resolved
  3. Minucias 3 (procesamiento de error)
    cuando se utiliza Promise hacer control de proceso asíncrono, sobre el manejo de excepciones se puede proporcionar una captura después de la última entonces
    especifique una función de procesamiento de fallo, que puede capturar toda anterior objeto Promise sí misma, y luego error de trabajo interno
    cara actual cualquier excepción se produce directamente en la captura, incluyendo todos Promise posterior a continuación, ya no realizar

resolver y rechazar dos parámetros

resolver la falta de devolver un resultado
de rechazo para devolver resultados de éxito
Nota: solamente determinación rechazar y pasar un valor, o una matriz de una pluralidad de valores de transmisión a los objetos de uso.

new Promise((resolve, reject)=>{
    resolve(1, 2, 222, 333);
}).then((data1,data2)=>{
    console.log(data1,data2);
});

El resultado:
Aquí Insertar imagen Descripción

Tres de lectura asíncrona de archivos

const fs = require('fs');

new Promise((resolve, reject)=>{
    fs.readFile(__dirname + '/data/a.txt', (err, data)=>{
        if(err){
            reject(err);
        }
        resolve(data);
    });
}).then((data)=>{
    console.log(data.toString());
    return new Promise((resolve, reject)=>{
        fs.readFile(__dirname + '/data/b.txt', (err, data)=>{
            if(err){
                reject(err);
            }
            resolve(data);
        });
    });
}).then((data)=>{
    console.log(data.toString());
    return new Promise((resolve, reject)=>{
        fs.readFile(__dirname + '/data/cc.txt', (err, data)=>{
            if(err){
                reject(err);
            }
            resolve(data);
        });
    });
}).then((data)=>{
    console.log(data.toString());
});

asíncrono tres archivos optimizado lectura

const fs = require('fs');

readFile(__dirname + '/data/b.txt').then((data)=>{
    console.log(data.toString());
    return readFile(__dirname + '/data/a.txt');
}).then((data)=>{
    console.log(data.toString());
    return readFile(__dirname + '/data/cc.txt');
}).then((data)=>{
    console.log(data.toString());
});


function readFile(...args){
    return new Promise((resolve, reject)=>{
        fs.readFile(...args, (err, data)=>{
            if(err){
                reject(err);
            }
            resolve(data);
        })
    });
}

trampa de excepción

Por último, añadir una captura de la cadena, si hay un lugar equivocado, se ejecutará la captura

const fs = require('fs');

readFile(__dirname + '/data/b.txt').then((data)=>{
    console.log(data.toString());
    return readFile(__dirname + '/data/aa.txt');
}).then((data)=>{
    console.log(data.toString());
    return readFile(__dirname + '/data/cc.txt');
}).then((data)=>{
    console.log(data.toString());
}).catch(err => {
    console.log(err);
});


function readFile(...args){
    return new Promise((resolve, reject)=>{
        fs.readFile(...args, (err, data)=>{
            if(err){
                reject(err);
            }
            resolve(data);
        })
    });
}
Publicados 284 artículos originales · ganado elogios 126 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/KaiSarH/article/details/104746604
Recomendado
Clasificación