• Promise


    ES6 promise:  http://es6.ruanyifeng.com/#docs/promise

    首先用处:异步编程

    老土的做法:异步代码块 回调 ,然后回调函数又是异步,异步里面嵌套回调函数。。。。由于缩进,代码结构上三角形,有人称“毁灭金字塔”,还有人称“ 回调地狱”

    ES6 promise对象   4个状态  只有异步操作能改变 promise的状态

    • pending: 还没有得到肯定或者失败结果,进行中
    • fulfilled: 成功的操作
    • rejected: 失败的操作

    2个重要方法

    then:将事务添加到事务队列中        resolve:开启流程,让整个操作从第一个事务开始执行

    通常用法:

    p=new Promise(function (resolve,reject) {
           dosome...异步操作
           if("异步操作成功"){
               resolve("回调参数")
           }else{
               reject(error);
           }
       })
        p.then( //接受2个回调函数 ,一个是success 另外一个是error  
                function ('回调参数') {
            
        },function (err) {
           console.log("发生错误"+err)
       })

    偷个栗子过来尝尝

    var getJSON = function (url) {
            var promise = new Promise(function (resolve, reject) {
                //XMLHttpRequest 异步请求
                var client = new XMLHttpRequest();
                client.open("GET", url);
                client.onreadystatechange = handler;
                client.responseType = "json";
                client.setRequestHeader("Accept", "application/json");
                client.send();
    
                function handler() {
                    if (this.readyState !== 4) {
                        return;
                    }
                    if (this.status === 200) {
                        resolve(this.response);  //响应成功,通过resolve 改变状态,而且传响应参数给
                                                //.then的成功回调函数
                    } else {
                        reject(new Error(this.statusText));  //响应失败,通过reject改变状态 传参数
                    }
                };
            });
    
            return promise;
        };
        getJSON("/posts.json").then(function (json) {    //相当于实例化一个promise对象,封装状态信息
            console.log('Contents: ' + json);        
        }, function (error) {
            console.error('出错了', error);    //失败的回调
        });
    var p1 = new Promise(function (resolve, reject) {
      // ...
    });
    
    var p2 = new Promise(function (resolve, reject) {
      // ...
      resolve(p1);
    })
    
    一个异步操作的结果是返回另一个异步操作

    Promise对象的错误具有“冒泡”性质,会一直向后传递,直到被捕获为止。也就是说,错误总是会被下一个catch语句捕获。

    var p = Promise.all([p1, p2, p3]); Promise.all方法接受一个数组作为参数,p1p2p3都是Promise对象的实例,如果不是,就会先调用下面讲到的Promise.resolve方法,将参数转为Promise实例,再进一步处理
    Promise.resolve('foo')
    // 等价于
    new Promise(resolve => resolve('foo'))
  • 相关阅读:
    测试一面(宇宙条)
    java实现快速排序
    java实现冒泡排序
    Perl 获取当前系统时间
    日常问题解决:记一次因watchdog未启动导致的resin启动失败解决
    日常问题解决:记一次因信号量不足引起的APACHE启动错误解决以及kernel.sem值优化
    oracle11g使用expdp、impdp导出导入用户表结构
    日常问题解决:rhel6解决curl版本过旧问题
    日常问题解决:解决fork: retry: 资源暂时不可用
    日常问题解决:rhel7修改TCP最大连接数
  • 原文地址:https://www.cnblogs.com/godbutton/p/6170583.html
Copyright © 2020-2023  润新知