Promise初探
promise是异步编程的一种解决方案,Promise对象代表一个异步操作,有三种状态:Pending(进行中)、Resolved(已完成,又称 Fulfilled)和Rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态,并且状态一旦改变,就不会再变。
- 使用promise简单场景,比如在AJAX请求中,需要在每个成功的回调中不断再请求新的内容就要在回调中不断的嵌套一坨代码,通过promise可以将代码写的非常清晰。
- 以一个嵌套的setTimeout为例
- 用promise改写
- Promise.all()
- 只要传入的对象中有一个被rejected,返回的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给回调函数
- Promise.all()方法接受一个参数,这个参数是一个可以监控的promises迭代(例如数组),而且仅当迭代中每个promise resolved后,返回一个resolved promise。当迭代中的每个promise都是fulfilled,返回的promise是fulfilled,
- Promise.race()
- 只要one、two、three之中有一个实例率先改变状态,返回的状态就跟着改变。率先改变的 Promise 实例的返回值,就传递给回调函数
- 该方法生成并返回一个新的promise对象,参数promise 数组中的任何一个promise对象如果变为resolve或者reject的话, 该函数就会返回,并使用这个promise对象的值进行resolve或者reject。
传入Promise.race()的promises就是一场比赛,看哪个promise首先处理。如果处理的第一个promise是fulfilled,那么返回的promise也是fulfilled;如果处理的第一个promise是rejected,那么返回的promise是rejected。