promise的知识

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)
})

上一篇:python之数据库管理工具sandman2


下一篇:手写Promise (2)实现then方法