1.Promise是什么?是解决什么问题的?
Promise是异步编程的一种解决方案,主要用于异步计算,可以将异步操作队列化按照期望顺序执行,返回符合预期的结果,可以在对象之间传递和操作promise,帮助我们处理队列。
2.为什么要用Promise?
如果在回调函数的内部还需要进行另外一个异步操作,嵌套一个异步操作还好,可如果是需要嵌套多个的时候,代码块就会很混乱,容易出错还不便于阅读,这种情况被称为‘回调地狱’
3.Promise的API:
resolve,reject,then,catch,all,race
1.resolve:将Promise对象的状态从“未完成”变为“成功”,在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;
2.reject:将Promise对象的状态从“未完成”变为“失败”,在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。
3.catch:catch也会返回一个promise实例,并且是resolved状态
4.Promise.all() :一次性执行多个Promise,如果所有的Promise都是成功的,返回是所有Promise结果组成的数组;如果有一个Promise执行错误,返回就是该Promise的reject值。
5.Promise.race():一次性执行多个Promise,返回的最快的结果。
6.then:
1、接收两个函数作为参数,分别代表fulfilled(成功)和rejected(失败)
2、.then()返回一个新的Promise实例,所以它可以链式调用
3、当前面的Promise状态改变时,.then()根据其最终状态,选择特定的状态响应函数执行
4、状态响应函数可以返回新的promise,或其他值,不返回值也可以我们可以认为它返回了一个null;
5、如果返回新的promise,那么下一级.then()会在新的promise状态改变之后执行
6、如果返回其他任何值,则会立即执行下一级.then()
4.Promise的三个状态:
1、pending[待定]初始状态
2、fulfilled[实现]操作成功
3、rejected[被否决]操作失败
注:当promise状态发生改变,就会触发then()里的响应函数处理后续步骤;
Promise对象的状态改变,只有两种可能:
从pending变为fulfilled
从pending变为rejected
注:promise状态一经改变,状态就凝固了,不会再变。