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的前世今生)
- YJKJpromise
- loadlibrary
- Okhttp源码阅读之旅(二)
- 转行穷三年?未必!
- C#语言基础学习总结-1
- vue-express-mogodb_SPA 使用 js 搞定前后端。
- YJKJpromise
- 通过反射机制创建一个构造方法中参数数量可变的对象
- 2016蓝桥杯C/C++省赛 方格填数(深搜DFS)
- ECDH 秘钥交换
- 【Android】as开发环境搭建
- macbook下启动mysql报错 . ERROR! The server quit without updating PID file
- 2017.3.13-2017.3.19 第三个星期
- Java 指定线程执行顺序(三种方式)
- 卷积网络层计算