Promise基本语法
Promise是ES6引入的异步编程的新解决方案。语法上Promise是一个构造函数,用来封装异步操作并可以获取其成功或失败的结果。
-
Promise构造函数:Promise(excutor){}
-
Promise.prototype.then方法
-
Promise.prototype.catch方法
- Promise封装Ajax
let p = new Promise((resolve, reject) => {
//1.创建对象
let xhr = new XMLHttpRequest();
//2.初始化
xhr.open("get", "https://api.apiopen.top/getJoke");
//3.发送
xhr.send();
//4.绑定事件,处理相应结果
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300) {
resolve(xhr.response);
}
}
};
});
p.then(value => {
console.log(value);
}).catch(err => {
console.log(err);
});
Promise的then方法
-
then方法的返回结果也是Promise对象,对象状态由回调函数执行结果决定
-
如果then方法回调函数中返回的结果是非Promise类型的属性,then返回的promise对象的状态为成功,返回值为对象的成功的值(即resolve函数传入的值)
-
如果then方法回调函数中返回结果是Promise对象,then返回的promise对象的状态为返回的promise对象的状态,返回值为返回的promise对象then方法返回的值(或resolve函数参数的值)
-
如果then方法回调函数中返回结果是抛出错误,then返回的promise对象的状态为rejected,返回值为抛出错误的值
-
-
then方法可以链式调用
p.then(success=>{},err=>{}).then()
- 读取多个文件
var fs = require("fs");
const { resolve } = require("path");
var readPromise = new Promise((resolve, reject) => {
fs.readFile("./data/readfile1.txt", function (err, data1) {
// console.log(data1.toString());
resolve(data1);
});
});
readPromise
.then((value) => {
return new Promise((resolve, reject) => {
fs.readFile("./data/readfile2.txt", function (err, data2) {
resolve([value, data2]);
});
});
})
.then((value) => {
fs.readFile("./data/readfile3.txt", function (err, data3) {
value.push(data3);
console.log(value.join("\r\n"));
});
});