• ES6参考---promise对象结构分析


    ES6参考---promise对象结构分析

    一、总结

    一句话总结:

    promise对象本事是一个构造函数,这个构造函数里面需要传一个回调函数做参数,这个回调函数的两个参数又是构造函数里传回的回调函数

    1、为什么Promise这个构造函数的参数是一个回调函数,并且这个回到函数的两个参数(resolve和 reject)都可以当做方法来运行?

    因为外部是一个回调函数传进来,而这个回调函数里面又是两个回调函数作为参数传出去

    |||-begin

    function f(callback) {
      callback(function () {
          console.log('这是a');
      },function () {
          console.log('这是b');
      });
    }
    
    //外部
    f(function (a,b) {
      a();
      b();
    });

    |||-end

        //创建一个promise实例对象
        let promise = new Promise((resolve, reject) => {
            //初始化promise的状态为pending---->初始化状态
            console.log('1111');//同步执行
            //启动异步任务
            setTimeout(()=>{
                console.log('3333');
                //resolve('成功了传过去的数据');//修改promise的状态pending---->fullfilled(成功状态)
                reject('失败了传过去的数据');//修改promise的状态pending----->rejected(失败状态)
            },2000);
        });
        console.log(promise);
        promise.then((data) => {
            console.log('成功了:' + data);
        }, (error) => {
            console.log('失败了:' + error);
        });
        console.log('2222');

    二、promise对象结构分析

    博客对应课程的视频位置:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>promise对象</title>
     6 </head>
     7 <body>
     8 <!--
     9 promise
    10 英 /ˈprɒmɪs/  美 /ˈprɑːmɪs/
    11 n. 许诺,允诺;希望
    12 vt. 允诺,许诺;给人以…的指望或希望
    13 vi. 许诺;有指望,有前途
    14 
    15 Promise对象: 代表了未来某个将要发生的事件(通常是一个异步操作)
    16 
    17 promise对象
    18 将异步操作以同步的流程表达出来, 避免了层层嵌套的回调函数(俗称'回调地狱')
    19 本质是状态机,通过设定不同的状态来执行不同的操作
    20 
    21 promise对象使用操作流程
    22 ES6的Promise是一个构造函数, 用来生成promise实例
    23 
    24 a、创建promise对象
    25     let promise = new Promise((resolve, reject) => {
    26         //初始化promise状态为 pending
    27       //执行异步操作
    28       if(异步操作成功) {
    29         resolve(value);//修改promise的状态为fullfilled
    30       } else {
    31         reject(errMsg);//修改promise的状态为rejected
    32       }
    33     })
    34 b、调用promise的then()
    35     promise.then(function(
    36       result => console.log(result),
    37       errorMsg => alert(errorMsg)
    38     ))
    39 
    40 
    41 promise对象的3个状态
    42 promise对象的本质是状态机,那么promise对象有哪些状态
    43 1、pending: 初始化状态
    44 2、fullfilled: 成功状态
    45 3、rejected: 失败状态
    46 
    47 promise中如何设置状态
    48 可以在promise的构造函数的参数对应的回调函数中设置,
    49 如果异步操作成功,可以通过resolve方法设置为成功状态(fullfilled)
    50 如果异步操作失败,可以通过rejected方法设置为失败状态(rejected)
    51 
    52 promise中如何接收设置的状态
    53 用promise.then()方法可以来接收成功或者失败的状态,
    54 promise.then()的参数是两个回调函数,
    55 一个是操作成功的回调函数,一个是操作失败的回调函数
    56 
    57 
    58 promise对象异步操作应用
    59 使用promise实现超时处理
    60 使用promise封装处理ajax请求
    61 
    62 
    63 -->
    64 <script>
    65     //创建一个promise实例对象
    66     let promise = new Promise((resolve, reject) => {
    67         //初始化promise的状态为pending---->初始化状态
    68         console.log('1111');//同步执行
    69         //启动异步任务
    70         setTimeout(()=>{
    71             console.log('3333');
    72             //resolve('成功了传过去的数据');//修改promise的状态pending---->fullfilled(成功状态)
    73             reject('失败了传过去的数据');//修改promise的状态pending----->rejected(失败状态)
    74         },2000);
    75     });
    76     console.log(promise);
    77     promise.then((data) => {
    78         console.log('成功了:' + data);
    79     }, (error) => {
    80         console.log('失败了:' + error);
    81     });
    82     console.log('2222');
    83 
    84 
    85     // function f(callback) {
    86     //     callback(function () {
    87     //         console.log('这是a');
    88     //     },function () {
    89     //         console.log('这是b');
    90     //     });
    91     // }
    92     // f(function (a,b) {
    93     //     a();
    94     //     b();
    95     // });
    96 </script>
    97 </body>
    98 </html>
     
  • 相关阅读:
    leetcode5
    leetcode4
    maven笔记
    枚举使用笔记
    List遍历删除解决方案:遍历删除,迭代删除,removeIf
    java笔记(web部分)
    webview使用
    json数据格式+gson解析json问题总结
    android:layout_weight的简单使用
    欢迎界面效果
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/12815670.html
Copyright © 2020-2023  润新知