【ES6】浅谈Promise初体验

  1. List item

【es6】Promise

一、Promise的基本概念

  • Promise是ES6出来的一个构造函数,可以new一个Promise实例

  • 函数参数有两个参数 resolve(成功之后的回调函数) 、reject(失败之后的回调函数)

  • -Promise一旦声明就会立刻执行一次里面的代码

  • 用来解决回调地狱

二、Promise的三种状态

  • pending(进行中)、 当promise实例化出时状态就为pending
  • fulfilled(已成功) 调用resolve就是已成功状态
    也就是说你写 resolve() 除了可以调用你传入的回调函数,还可以把状态改为 已成功fulfilled
  • rejected(已失败) 调用reject就是已失败状态
    也就是说你写 reject() 除了调用你传入的回调函数,还把状态改成了 已失败(rejected)
  • 一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。

三、基本使用

//概念看的再多,也不一定能知道如何使用,接下来我们通过代码来看看Promise的使用和好处
//实例化promise
const promise = new Promise(function(resolve, reject) {
    let a = 1
    if (a == 1) {
    //成功
        resolve(a)
    } else {
    //失败
        reject(error)
    }
})

四、我们在开发中,可能会遇到一个简单的需求:依次读取多个文件的内容

const fs = require('fs')

//先读取出a的内容,再读取b的内容,再读取c的内容

fs.readFile('./files/a.txt', (error, data) => {

    console.log(data.toString());

    fs.readFile('./files/b.txt', (error, data) => {

        console.log(data.toString());

        fs.readFile('./files/c.txt', (error, data) => {

            console.log(data.toString());

        })

    })
})

//以上代码会导致出现回调地狱,而promise就是用来解决这种“回调地狱”的

于是就可以使用Promise来解决回调地狱:

//封装一下,将文件路径当做参数传递
function readPromise(path) {

    let p = new Promise((reslove, reject) => {

        //读取文件
        fs.readFile(`./files/${path}.txt`, (error, data) => {

            if (error) {

                reject(error)
            } else {

                reslove(data.toString())
            }
        })
    })

    return p
}
//调用readPromise方法,依次读取。.then中,返回一个promise实例,可以继续使用下一个 .then来处理
readPromise('a').then((res) => {

    console.log(res);
    return readPromise('b')
})
.then( res => {

     console.log(res);
     return readPromise('c')
} )
.then( res => {

    console.log(res);
    
} ) 

五、.then()和.catch()

  • .then():Promise 实例具有then方法,也就是说,then方法是定义在原型对象Promise.prototype上的。它的作用是为 Promise 实例添加状态改变时的回调函数。then方法的第一个参数是resolved状态的回调函数,第二个参数(可选)是rejected状态的回调函数。then方法返回的是一个新的Promise实例(注意,不是原来那个Promise实例)。因此可以采用链式写法,即then方法后面再调用另一个then方法。采用链式的then,可以指定一组按照次序调用的回调函数。
  • .catch():用于指定发生错误时的回调函数,如果状态变为resolved,则会调用then方法指定的回调函数;如果异步操作抛出错误,状态就会变为rejected,就会调用catch方法指定的回调函数,处理这个错误。另外,then方法指定的回调函数,如果运行中抛出错误,也会被catch方法捕获
  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值