相信很多倒霉孩子用过Promise,不管是ng的还是node里面的,但是那些或多或少都是封装的,现在我们说一下ES6提供的原生的Promise,简单来说,Promise就是一个对象保存着一个未来才会结束的事件,然后会返回给你API,方便给你这个事件以什么结果结束的处理。promise对象的状态不受外界影响,指根据它内部的那个事件或者异步操作改变而改变,它包含三个状态:pending(进行中)、fulfilled(已成功)、rejected(已失败);它的状态变化只能是 pending==》fulfilled和pending==》rejected,而且状态改变了就不能再变化,就会进行结果输出。
ES6原生的Promise对象是个构造函数用来生成实例,并且会在新建之后立即执行,promise = new Promise(function(resolve,reject))其中resolve是将promise中的异步操作转换成fulfilled状态并将结果作为参数传递出去,reject是将promise中的异步操作转换成rejected状态并将结果作为参数传递出去。其实例对象方法,promise.then接受两个回调函数做参数表示异步操作的成功和失败的处理,可以做链式操作;promise.catch指定发生错误时的回调函数,并且其中产生的错误如果不被catch会一直传递直到被catch;Promise.all([arr])类似与$q.all([arr])同时处理多个promise的实例,只有promise都fulfilled才会返回fulfilled否则返回rejected;Promise.race([arr])只要arr中的任何一个promise实例状态改变那么整个的状态都会改变,并且它的返回值是最先改变状态的那个实例的返回;Promise.resolve(obj)将obj转化成promise实例对象且状态是fulfilled,如果obj是一个promise对象且then方法齐全,那就直接执行then方法;Promise.reject(obj)返回一个promise对象且状态是rejected,并且obj会成为reject的参数(即失败的错误);promise.done()总是出现在回调链的尾端,保证抛出任何可能的错误;promise.finally()表示不管最后promise的状态是啥都要执行的操作。
反正可以看作基于ng和node里面的promise方法的拓展,反正写的话方法很乱。
网友评论