JS中Promise的实现(结合实例)以及执行顺序

1.Promise是异步编程的一种解决方案,比传统的解决方案——回调函数和时间更加合理且强大。

2.特点:

(1)对象的状态不受外界影响(3种状态)

[1]Pending状态(进行中)

[2]Fulfilled状态(已成功)

[3]Rejected状态(已失败)

(2)一旦状态改变就不会再变(两种状态的改变:成功、失败)

[1]Pending——>Fulfilled

[2]Pend——>Rejected

(3)可以把Promise看成一个状态机,初始是Pending状态,可以通过函数resolve和reject,将状态转变为Fulfilled或者Rejected状态。状态一旦改变,就不能再次改变。

3.Promise实例

(1)例子:

var promise = new Promise(function(resolve,reject){
    //...some code
    if(/*异步操作成功*/){
        resolve(value)
    }else{
        reject(error)
    }
})

(2)Promise构造函数接收一个函数作为参数,该函数的两个参数分别为resolve和reject。它们是两个函数。由JavaScript引擎提供,不用自己部署。

[1]resolve作用是将Promise对象状态由”未完成“变为”成功“,也就是Pending——>Fulfilled,在异步操作成功时调用,并将异步操作的结果作为参数传递出去。

[2]reject函数是将Promise对象状态由"未完成"变为"失败",也就是Pending——>Rejected,在异步操作失败时调用,并将异步操作的结果传递出去。

4.Promise的then函数:Promise实例生成后,可用then方法分别指定两种状态回调函数。then方法可以接受两个回调函数作为参数。

(1)Promise对象状态改为Rejected时调用(必选)

(2)Promise对象状态改为Rejected时调用(可选)

5.then函数的基本用法实例

function sleep(ms){
    return new Promise(function(resolve,reject){
        setTimeout(resolve,ms)
    })
}
sleep(50).then(()=>console.log("finished"))

这段代码定义了一个sleep函数,调用后,等待50ms后执行then函数中的内容。

6.与定时器混用后的执行顺序

let promise = new Promise(function(resolve.reject){
    console.log("1")
    resolve()
})
setTimeout(()=>console.log("2"),0);
promise.then(()=>console.log("3"));
console.log("4")

分析:

(1)顺序为1—>4—>3—>2

(2)主要讨论2和3的顺序问题:Promise属于JavaScript引擎内部任务;SetTimeout是浏览器API;引擎内部任务的优先级高于浏览器的API

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值