promise

按照用途来解释

主要用于异步计算
可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果
可以在对象之间传递和操作promise,以帮助我们处理队列。

异步操作的常见语法

事件侦听与相应
image.png
回调

image.png
回调有四个问题:

嵌套层次很深,难以维护
无法正常使用return和throw
无法正常检索堆栈信息
多个回调之间难以建立联系

new Promise(
      function(resolve,reject){
          resolve();//数据处理完成
          reject();//数据处理出错
}
)
.then(function A(){
}.function B(){

});

promise是一个代理对象,它和原先要进行的操作并无关系
通过引入一个回调,避免更多的回调
promise状态发生改变,就会触发.then()里的响应函数处理后续步骤
promise状态一经改变,不会再变
promise实例一经创建,执行器立即执行
.then()接收两个函数作为参数,分别代表fulfilled和rejected
.then()返回一个新的promise实例所以它可以链式调用
当前面的promise状态改变时,.then根据其最终状态选择特定的状态响应函数实行
状态响应函数可以返回新的promise或其他值:如果返回新的promise,那么下一级.then会在新的promise状态改变之后进行;如果返回其他任何值,则会立即执行下一级.then()
.then里面有.then的情况:
因为.then返回的还是promise实例,会等里面的.then执行完,再执行外面说我

误处理:
promise会自动捕获内部异常,并交给rejected响应处理函数
处理错误的两种做法:
reject('错误信息').then(null,message=>{})
throw new Erro('错误信息').catch(message=>{})
强烈建议在所有队列最后面都加上.catch以避免漏掉错误处理造成意想不到的错误
dosomething()
.doAnotherthing()
.doMorething()
.catch(err=>{
console.log(err)})

promise的常用函数:

1、promise.all()批量操作

promise.all([p1,p2,p3...])用于将多个Promise实例,包装成一个新的promise实例,返回一个新的普通的promise实例。
它接收一个数组作为参数,数组里可以是promise对象,也可以是别的值,只有promise会等待状态改变。
当所有子promise都完成,该promise完成,返回值是全部值的数组,有任何一个失败,该promise失败,返回值是第一个失败的promise的结果

2、promise.resolve()

返回一个fulfilled的的promise实例或原始promise实例
参数为空,返回一个状态为fulfilled的promise实例
参数是一个跟promise无关的值,同上,不过fulfuilled响应函数会得到这个参数
参数为promise实例,则会返回该实例,不做任何修改
参数为thenable立即执行他的.then()

3、promise.reject()

返回一个rejected的promise实例
promise.reject()不认thenable

4、promise.race()

类似于promise.all()区别在于它有任意一个完成就算完成
常见用法:
把异步操作和定时器放在一起
如果定时器先触发,就认为超时,告知用户

你可能感兴趣的:(promise)