• 技术文章 >web前端 >js教程

    es6之Promise的详细介绍

    零下一度零下一度2017-06-26 15:23:45原创674
    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中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:Promise
    上一篇:日期函数和对于函数封装的灵活运用 下一篇:对react native 的AsyncStorage 进行小型封装
    大前端线上培训班

    相关文章推荐

    • javascript怎么将float转为int类型• javascript如何获取文件大小• javascript es6数组方法有哪些• javascript怎么将字符转换成数字• javascript有几种变量

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网