• promise迷你书-读书笔记


    Promise三种类型

      Constructor

      使用Promise构造器来实例化一个promise对象

      

    1 var promise = new Promise(function(resolve,reject){
    2     //异步处理
    3     //处理结束,成功调用resolve,失败调用reject
    4 })

      Instance Method

      promise实例对象处理成功或者失败的回调函数

      

    promise.then(onFulfilled,onRejected)
    // resolve(成功)回调函数 onFulfilled
    // reject (失败)回调函数 onRejected
    
    promise.catch(onRejected)
    //reject(失败)时,对异常的处理 onRejected

      Static Method

      Promise作为全局对象还有静态方法

      

    Promise.all()
    Promise.resolve()
    Promise.reject()

     

    使用promise对象

      

    function getUrl(url){
        return new Promise((resolve,reject)=>{
            $.ajax({
                url:url,
                method:'get',
                success:function(res){
                    resolve(res)
                },
                error:function(err){
                    reject(err)
                }
            })
        })
    }
    
    var url = 'http://httpbin.org/get'
    getUrl(url).then((res)=>{
        //处理resolve(成功)的回调
        console.log(res)
    }).catch((err)=>{
        //处理reject(异常)的回调
        console.log(err)
    })

    Promise静态方法

      Promise.resolve

      • new Promise的快捷方式

          静态方法Promise.resolve(value) 可以认为是 new Promise() 方法的快捷方式

        

    Promise.resolve(42).then(function(value){
        console.log(value);
    });

          Promise.resolve(value) 同样返回一个promise对象,并且会使这个对象从pending状态转为resolved状态

      • Thenable

          Promise.resolve静态方法的另一个作用就是将thenable对象转为promise对象,到底什么样的对象能算是thenable的呢,最简单的例子就是 jQuery.ajax(),它的返回值就是thenable的.因为jQuery.ajax() 的返回值是 jqXHR Object 对象,这个对象具有 .then 方法

       

    function getUrl(url){
        return Promise.resolve($.ajax(url))
    }
    var url = 'http://httpbin.org/get1'
    getUrl(url).then((res)=>{
        console.log(res)
    }).catch((err)=>{
        console.log(err)
    })

      Promise.reject

        和Promise.resolve()一样是静态方法,是new Promise()的快捷方式

        

    Promise.reject(new Error("BOOM!")).catch(function(error){
        console.error(error);
    });

      

    每次调用then都会返回一个新创建的promise对象

      then的错误使用方法  

    function badAsyncCall() {
        var promise = Promise.resolve();
        promise.then(function() {
            // 任意处理
            return newVar;
        });
        return promise;
    }

      首先在 promise.then 中产生的异常不会被外部捕获,此外,也不能得到 then 的返回值,即使其有返回值。

      由于每次 promise.then 调用都会返回一个新创建的promise对象,应该采用promise chain的方式将调用进行链式化,修改后如下

      

    function anAsyncCall() {
        var promise = Promise.resolve();
        return promise.then(function() {
            // 任意处理
            return newVar;
        });
    }

      

  • 相关阅读:
    JavaScript 变量类型 保存内存中的位置 和 引用
    https连接过程
    微信消息自动回复 json版
    RabbitMQ安装
    nginx反向代理
    小程序接口记录
    nginx同服务器不同目录的差别配置
    nginx URL隐藏index.php
    Laravel 打印SQL语句
    laravel PostTooLargeException
  • 原文地址:https://www.cnblogs.com/madlife/p/11294147.html
Copyright © 2020-2023  润新知