Promise是ES6引入的异步编程的新解决方案。语法上Promise是一个构造函数,用来封装异步操作并可以获取其成功或失败的结果。
- Promise 构造函数:Promise (excutor) {}
- Promise.prototype.then 方法
- Promise.prototype.cath 方法
// 实例化Promise
const Pro = new Promise((resolve, reject) => {
setTimeout(() => {
let data = "数据库中的数据"
resolve(data)
let error = "读取数据失败"
reject(error)
})
})
// 使用Promise的.then方法
Pro.then(
value => console.log(value), // 数据库中的数据
error => console.log(error)) // 失败的话,就会接收reject传过来的数据
封装Promise读取文件
// 1. 引入fs模块
const fs = require("fs")
// 2. 调用方法读取文件
// fs.readFile("./text/a.text", (err, data) => {
// if (err) console.log(err)
// console.log(data.toString()) // a.testaa
// })
// 读取文件本身就是异步操作
// 3. 使用Promise封装
const Pro = new Promise((resolve, reject) => {
fs.readFile("./text/a.text", (error, data) => {
if (error) reject(error)
resolve(data)
})
})
Pro.then(
(value) => console.log(value.toString()), // a.testaa
(error) => console.log(error)) // 读取失败返回的值
Promise多个文件内容读取
const fs = require("fs")
const Pro = new Promise((resolve, reject) => {
fs.readFile("./text/a.text", (error, data) => {
resolve(data)
})
})
Pro.then(value => {
return new Promise((resolve, reject) => {
fs.readFile("./text/b.text", (error, data) => {
resolve([value, data])
})
})
}).then(value => {
return new Promise((resolve, reject) => {
fs.readFile("./text/c.text", (error, data) => {
value.push(data)
resolve(value)
})
})
}).then(value => console.log(value.join('\r\n')))
// 打印结果
/*
a.testaa
b.textbb
c.textcc
*/
.catch语法糖
const p = new Promise((resolve, reject) => {
setTimeout(() => {
reject("出错")
},1000)
})
p.catch((error) => console.log(error)) // 出错