promise

Promise学习路线:

1:应用:

1) promise 是什么?

2) 解决了什么问题?

3) promise中的两大痛点

4) 特点是什么?

5) 有哪些内容? 3个特殊属性

6) 原型api有哪些?

7) 静态api有哪些?

8) 在什么时候使用?

2:promise A+

1) 制定promise的规范。

3:总结

一,什么是promise?

1,promise

是es6中新增加对象,就是为了解决回调地狱的定义出来的一种方法。我们都知道代码有同步和异步俩种。同步简单来说就是同一时间只能干一件事,而异步表示同一时间可以干多件事。promise是利用then函数的链式调用解决了异步回调地狱问题。

2,具体地说:

(1)从语法来说:Promise就是一个构造函数 。

(2)从功能来说:Promise对象用来封装一个异步操作并得到其操作结果。

3,注意:

bug: 只要是回调函数是就是异步的----> 错误

​
例如:同步回调函数

function foo(cb){

console.log(1);

cb(); // 推翻:所有的回调函数都是异步。

console.log(3);

}

foo(()=>{

// 回调函数:当一个定义的函数,作为另一个函数的实参时。

console.log(2);

})

console.log(4);

输出结果:1234

​

good: 以前异步程序都是用回调函数编写---->正确

例如:

//证明:在promise之前,所有的异步都是回调函数.

console.log(1);

// 区分:哪个是同步的哪个是异步?

// 1 setTimeout() 是同步执行的

// 2 回调函数是异步执行的

setTimeout(() => {

console.log(2);

}, 0);

console.log(3);

输出结果:132

二,解决了什么问题?

1,promise为了解决异步编程的新解决方案,解决了回调地狱的问题。

三,promise中的两大痛点

1,回调地狱

痛点:可维护,可读性问题. 不是性能,不是内存问题

 function foo(cb) {
            console.log(1);
            setTimeout(() => {
                cb((cd) => {
                    console.log(3);
                    cd()
                })
            }, 16.7);
            console.log(5);
        }
        foo((cb) => {
            console.log(2);
            setTimeout(() => {
                cb(() => {
                    console.log(4);
                })
            }, 16.7);
            console.log(6);
        })

        function ajax(options){
            let {url='/',method='get',success} = options;
            let xhr = new XMLHttpRequest();
            // ...
            xhr.onreadystatechange = ()=>{
                if(xhr.readyState == 4 && xhr.status === 200){
                    success(xhr.responseText);
                }
            }
        }

2,连环请求

痛点:太难看懂了.
        ajax({
            url:"/",
                   success:()=>{
                             ajax({
                                  success:()=>{
                              ajax({
                                  success(){
                                      }
                               })
                          }
                    })
                }
           })

四,promise特点是什么?

1、对象的状态不受外界影响。

只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是 Promise 这个名字的由来,它的英语意思就是「承诺」,表示其他手段无法改变。

2、一旦状态改变,就不会再变,任何时候都可以得到这个结果。

Promise 对象的状态改变,只有两种可能:从 Pending 变为 Resolved 和从 Pending 变为 Rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果。就算改变已经发生了,你再对 Promise 对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。

代码演示

console.log(1);
        setTimeout(() => {
            console.log('---2--------');
        }, 0);
        let p = new Promise((resolve, reject) => {
            // 1:该函数是不是回调函数? 是
            // 2:该函数是同步执行还是异步执行? 同步执行
            // 3:话说promise实例对象是为了解决异步回调地狱问题?究竟哪里的程序是异步程序呢?then 的回调函数异步执行
            console.log(2);
            // 1 resolve 是触发 then实参一函数的条件之一
            // 2 resolve 同步触发函数,但是 then的回调函数是异步触发的
            //   因为then的回调函数,在Promise内部有多个执行条件,resolve执行只是条件之一
            // bug: resolve赋值不是then的实参一,是Promise内部定义的函数
            resolve()

            // reject 是触发then 实参二函数的条件之一&#x
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值