¿Por qué utilizar una promesa?
-
diablos resolución de devolución de llamada
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()); } }); }); } });
-
Soluciones petición asíncronos
concepto
¿Cuál es la promesa?
- 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.
- 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?
- 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
- Pendiente: se crea instancia de objeto Promise cuando el estado inicial
- Cumplido: el éxito del Estado
- 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)
- 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 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 - 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:
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);
})
});
}