Promise

简介

  • ES6将某一件事情可以发生异步的时候,分为2ge阶段unsettled未决阶段和settled已决阶段 事情总是从未决阶段逐步发展到已决阶段,并且未决阶段有控制通往已决阶段的能力,可以决定事情最终走向的状态
  • ES6将程序分为3中状态:pending resolved rejected pending状态:挂起(等待) 处于未决阶段,表示事情还在挂起最终的结果还没有出现 resolved状态:已处理 处于已决阶段,表示整个事情已经出现了结果,并且可以按照正常的逻辑进行下去的结果 rejected状态:已拒绝 处于已决阶段,表示整个事情已经出现了结果,并且无法按照正常的逻辑进行下去的结果
  • 把事情从pending状态推向resolved状态的过程中可能会传递一些数据,这些数据一般为真实有效数据 把事情从pending状态推向rejected状态的过程中可能会传递一些数据,这些数据一般为错误信息
  • 当事情已经到达已决阶段后,通常要进行后续处理,不同的已决阶段,决定了不同的后续处理 resolved 这是一个正常的已决状态,后续处理表示为thenable rejected 这是一个非正常的已决状态,后续处理表示为catchable 后续处理可能会有多个,因此就会形成任务队列,这些后续处理会按照顺序,当到达对应的状态依次执行

使用 new 来创建一个promise对象 

Promise接受一个「函数」作为参数,该函数的两个参数分别是resolve和reject。这两个函数就是就是「回调函数」

resolve函数的作用:在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;

reject函数的作用:在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去
 

 Promise的API

then()方法

then 方法就是把原来的回调写法分离出来,在异步操作执行完后,用链式调用的方式执行回调函数

而 Promise 的优势就在于这个链式调用。我们可以在 then 方法中继续写 Promise 对象并返回,然后继续调用 then 来进行回调操作
 

reject()方法:
我们通过 resolve 方法把 Promise 的状态置为完成态(Resolved),这时 then 方法就能捕捉到变化,并执行“成功”情况的回调。
而 reject 方法就是把 Promise 的状态置为已失败(Rejected),这时 then 方法执行“失败”情况的回调(then 方法的第二参数)

回调函数使用

        //实例生成后用then方法指定相应状态对应的回调函数
        promise.then(function(success) {
            //success
        }, function(error) { //第二个为可选参数,可不写
            //failure
        })

        // then的链式调用: promise.then() 返回的也是一个promise对象, 也具有两个状态
        promise.then(function(success) {
            return 'name'; //前一个then方法的返回值传给下一个then作为参数
        }).then(function(name) { //获取上一个then传来的name
            console.log(name);
        }, function(error) { //错误时进行调用
            console.log('rejected');
        })

 

        // Promise本质上就是一个构造函数
        const pro = new Promise(function(resolve, reject) {
            // 1.未决阶段  同步代码
            // 通过调用resolve函数将promise从pending状态推向resolved状态
            // 通过调用reject函数将promise从pending状态推向rejected状态
            // 2.resolve和reject只能使用一个,如果使用多个,也只有第一个有用
            // 3.传递的参数只能有一个,表示推向出去的数据
            // reject("!") 
            resolve([true, "123"])
        })
        console.log(pro)
        pro.then(function(data) {
            // thenable resolve推出的结果
            console.log(data)
        }, function(err) {
            // catchable reject退出的结果
            console.log(err)
        })

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值