YJKJpromise

来源:互联网 发布:录屏大师windows 编辑:程序博客网 时间:2024/06/16 19:21

promise:用来处理异步操作,不会阻塞和等待长时间操作完成。采用异步编程不会影响整个页面和用户的交互,脱离回调模式,promise是基于状态的,解决回调地狱问题。


promise接收函数作为参数,函数里有两个参数 resolve和reject,我们用promise时,一般是封装在一个函数中,在需要的时候去调用这个函数。


promise是一个构造函数,本身有all、reject、resolve等方法,原型上有 then、catch等方法。


JS中输出一个未定义的变量时,正常情况下不会往下执行,但在promise中会进入catch方法,catch方法中有回调函数,把错误原因传入函数的reson参数中,与js中的tyr、catch相似。


promise.all提供了并行执行异步操作的能力,并且在异步操作执行完后才执行回调。all接收一个数组参数,数组对象都是promise对象,等所有的执行完才进入then,所有的数据都会在then里。使用场景: 预先加载到各种资源时,等加载完再进行页面初始化。


promise.race方法和all相反,但也接收一组参数,参数都是promise对象,race里的参数会赛跑, 谁快谁赢。使用场景:给异步请求设置超时时间,并在超时后执行相应操作。


(1)对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:Pending(进行中)、Resolved(已完成,又称 Fulfilled)和Rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。

(2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从Pending变为Resolved和从Pending变为Rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果。如果改变已经发生了,就算你再对Promise对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。


resolve函数的作用是,将Promise对象的状态从“未完成”变为“成功”(即从Pending变为Resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从Pending变为Rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

resolve状态下 throw抛出错误无效。


JS是单线程的,回调函数会造成回调地狱,所以就出现了同步的方式写异步,promise(es6)、async/wait(ES7)、generator、web worker


JQ的deffered、angular中的$q、ng-route、ui-router都属于promise范畴。


避免promise吞掉错误,总是将链条以catch结尾。


web worker允许JS创建多个线程,但子线程完全受主线程控制,且不得操作DOM。

web worker中的API:postMesage()、terminate()、message()、error()

Generator 函数是协程在 ES6 的实现,最大特点就是可以交出函数的执行权(即暂停执行)。


参考网址:http://es6.ruanyifeng.com/#docs/promise(阮一峰ES6promise)

                    http://www.ruanyifeng.com/blog/2015/04/generator.html(generator函数的含义和用法)

                   http://www.cnblogs.com/lvdabao/p/es6-promise-1.html(大白话讲解Promise)

                   http://www.cnblogs.com/whitewolf/archive/2015/10/22/4902570.html(promise的前世今生)

                 





0 0
原创粉丝点击