Promise是ES6引入的异步编程的新解决方案。语法上是Promise的一个构造函数,用来封装异步操作并可以获取成功或失败的案例
1.Promise构造函数:Promise(excutor){};
2.Promise.prototype.then方法;
3.Promise.prototype.catch方法;
1).实例化Promise对象
Promise 对象的三种状态:初始化,成功,失败
示例:
const p=new Promise(function(resolve, reject) {
//封装在Promise对象里面
setTimeout(function() {
// let data='数据库中的用户数据';
// resolve(data);
let aro='数据读取失败';
reject(aro);
},1000)
})
//调用promise对象的then方法
//如果读取成功,则调用第一个回调函数如果失败调用第二个回调函数
p.then(function(value){
// console.log(value)
},function(reason){
console.error(reason)
})
2)Promise-then方法:
//创建一个promise对象
const p = new Promise((resolve, reject) => {
setTimeout(() => {
reject('用户数据');
}, 1000)
})
// const result= p.then(value=> {
// console.log(value);
// }, reason=> {
// console.warn(reason);
// })
// console.log(result);
//链式调用
p.then(value=>{
console.log(value);
},reason=>{
console.warn(reason)
}),(value=>{
},reason=>{
})
3)Promise的catch方法:
<script>
const p=new Promise((resolve,reject)=>{
reject('出错啦!');
})
// p.then(value=>{
// console.log(value);
// },reason=>{
// console.error(reason);
// });
p.catch(reason=>{
console.warn(reason);
});
4)Promise解决回调地狱
const fs = require("fs");
// fs.readFile('./resources/jsy.md', (err, data1) => {
// fs.readFile('./resources/ly.md', (err, data2) => {
// fs.readFile ('./resources/qmy.md', (err, data3) => {
// let result = data1 + '\n' + data2 + '\n' + data3;
// console.log(result);
// });
// });
// });
//使用Promise实现
//then方法的链式调用,封装多个异步任务
const p = new Promise((resolve, reject) => {
fs.readFile('./resources/jsy.md', (err, data) => {
resolve(data);
})
})
p.then(value => {
return new Promise((resolve, reject) => {
fs.readFile('./resources/ly.md', (err, data) => {
resolve([value,data]);
})
})
}).then(value => {
return new Promise((resolve, reject) => {
fs.readFile('./resources/qmy.md', (err, data) => {
value.push(data);
resolve(value);
})
})
}).then(value => {
console.log(value.join('\r\n'));//拼接,用空格和换行隔开
})