promise的知识:
相当于一个容器,里边保存着还没有结束的异步操作,保存着事件的结果,promise相当于一个对象,提供统一的api,各种异步操作都可以用同样的方法去处理
promise的两个特点:
1.对象的状态不受外界影响,处理异步异步操作有3个状态
进行中(pending),
处理完成(resolve):你获取的结果已经存放在当前这个结果中
失败的结果(reject):
2.一旦状态改变,就不会再变,逆转,只要成功,那么我就可以通过promise对象来获取到最后的结果
首先,promise是一个对象,那么你在使用的时候,就先将promise new出来
```javascript
new Promise()
## 这个括号中是有一个参数,作为回掉函数使用
new Promise(function name(params) {
})
## 这个函数它会接受两个参数,一个是resolve,一个是reject,他们两个都是函数
new Promise(function name(resolve,reject) {
})
## 这样写出来的时候,打印可以检查出来promise是一个对象
let promise = new Promise(function name(resolve, reject) {
// 中间这块就是用来执行异步操作
})
console.log(promise);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-anya9Jd5-1617324257361)(D:\微信小程序笔记\3c84f6c5236a7191a8c0663559446c4.png)]
## 其中promise有个then方法:
let promise = new Promise(function name(resolve, reject) {
// 中间这块就是用来执行异步操作
// 以下是接口返回的数据
let res = {
// 这是数据请求成功与否的状态
code: 200,
// 这是返回的数据
data:{
name:'小马哥'
}
},
setTimeout(()=>{
if (res.code===200) {
resolve(res.data);
} else {
reject(res.error)
}
},1000);
})
console.log(promise);
// 当调用.then的方法的时候,.then中接受的参数val就是resolve返回来的成功的数据
promise.then((val) => {
console.log(val);
},(err)=>{
console.log(err)
});
# 大致过程就是:
### 后台返回一些数据还有状态吗,如果状态码显示成功的话,resolve就会接受返回数据的resolve(res.data),并且resolve会把这个数据传给.then方法中的函数作为参数;如果失败了,reject(res.error),
### 并且reject会把错误信息通过.then的第二个回调函数的参数进行传达
```javascript
var fs = require('fs')
// console.log(1)
// 在es6中新增了一个apipromise
// promise是一个构造函数
// 1.创建promise容器
// 给别人一个承诺
var p1 = new Promise(function (resolve, reject) {
// console.log(2)
fs.readFile('./data/aaa.txt','utf8', function (err, data) {
if (err) {
// 把容器中的pending状态改为rejected
// 这里调用reject相当于调用then方法的第二个参数函数
reject(err)
} else {
// 把容器中的pending状态改为成功resolved
// 也就是说这里调用的resolve方法实际上就是then方法传递的那个function
resolve(data)
}
})
}
)
// p1就是那个承诺
// 当p1成功了,然后(then)做指定的操作
// then方法接受的function就是容器中的resolve函数
// 这个function中的data就是resolve中的data
p1.then(function (data) {
console.log(data)
}, function (err) {
console.log('读取文件失败了', err)
})