首页 > web前端 > js教程 > 正文

es6之Promise的详细介绍

零下一度
发布: 2017-06-26 15:23:45
原创
1938人浏览过

promise

  1. promise是一个对象,从它可以获取异步操作的消息;

  2. 特点:对象的状态不受外界影响(Pending进行中、Resolved完成、Rejected失败),只有异步操作的结果可以决定当前状态;一旦状态改变就不会再变(只能从Pending到Resolved和Pending到Rejected);

  3. 缺点:一旦创建就会立即执行无法中途取消;如果没有回调函数,内部抛出的错误无法反映到外部;当处于Pending时,无法得知目前进展到哪一阶段;

  4. 一般不要在then方法里面定义Reject状态的回调函数(即then的第二个参数),而是使用catch方法;因为这种可以捕获前面then中的错误,也更接近同步写法(try/catch)

  5. catch方法返回的还是一个 promise 对象,因此后面还可以接着调用then方法;catch方法之中,还能再抛出错误

  6. promise.all方法用于将多个promise实例,包装成一个新的promise实例;promise.all方法的参数可以不是数组,但必须具有Iterator接口,且返回的每个成员都是promise实例;只有p1 p2 p3状态都变成fulfilled,p状态才会变成fulfilled;只要有一个rejected,p就变成rejected;

  7. promise.race也是将多个promise实例包装成新的promise;只要有一个对象状态变了,p状态就会跟着变,返回先改变的对象的值传给p的回调函数;

  8. promise.resolve将对象转为promise对象,状态为resolved

    // 将thenable对象转为promise对象var thenable = {
        then(resolve, reject) {
            resolve(200)
        }
    }var p = promise.resolve(thenable)
    
    p.then((data) => {
      console.log(data)
    })  // 200
    登录后复制
  9. promise.reject返回一个promise对象,该实例状态为rejected;这个方法方法的参数,会原封不动地作为reject的理由,变成后续方法的参数。

  10. 两个附加方法

    // donepromise.prototype.done = function(onFulfilled, onRejected) {this.then(onFulfilled, onRejected)
            .catch(function(reason) {
                setTimeout(() => {throw reason}, 0)   
            });
    };// finallypromise.prototype.finally = function (callback) {
        let P = this.constructor;return this.then(
            value  => P.resolve(callback()).then(() => value),
            reason => P.resolve(callback()).then(() => { throw reason })
        );
    };
    登录后复制

    done用于捕获任何时候可能出现的错误,并全局抛出;
    finally用于不管promise对象状态如何,都会执行的操作,接受一个普通的回调函数作为参数(必执行);

以上就是es6之Promise的详细介绍的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号