promise原理


当前第2页 返回上一页

1.最简单的实现

基于上面的应用场景发现promise可以有三种状态,分别是pedding 、Fulfilled、 Rejected。

Pending Promise对象实例创建时候的初始状态

Fulfilled 可以理解为成功的状态

Rejected可以理解为失败的状态

构造一个Promise实例需要给Promise构造函数传入一个函数。传入的函数需要有两个形参,两个形参都是function类型的参数。分别是resolve和reject。

Promise上还有then方法,then 方法就是用来指定Promise 对象的状态改变时确定执行的操作,resolve 时执行第一个函数(onFulfilled),reject时执行第二个函数(onRejected)

当状态变为resolve时便不能再变为reject,反之同理。

基于上面描述我们可以实现一个这样的promise

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

function Promise(executor){ //executor执行器

    let self = this;

    self.status = 'pending'; //等待态

    self.value  = undefined; // 表示当前成功的值

    self.reason = undefined; // 表示是失败的值

    function resolve(value){ // 成功的方法

        if(self.status === 'pending'){

            self.status = 'resolved';

            self.value = value;

        }

    }

    function reject(reason){ //失败的方法

        if(self.status === 'pending'){

            self.status = 'rejected';

            self.reason = reason;

        }

    }

    executor(resolve,reject);

}

Promise.prototype.then = function(onFufiled,onRejected){

    let self = this;

    if(self.status === 'resolved'){

        onFufiled(self.value);

    }

    if(self.status === 'rejected'){

        onRejected(self.reason);

    }

}

module.exports = Promise;

以上就是promise原理的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

promise原理

es6之promise的学习

promise是什么意思

实现promise的手把手教程

需要真正明白的promise

如何将 javascript 回调转换为 promise?方法介绍

es6-promise源码的分析

深入浅析 promise 比 settimeout() 快的原因

理解js原型链,继承和promis

更多相关阅读请进入《promise》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...