一、什么是Promise
Promise是异步编程的一种解决方案
,在ES6中Promise被列为了正式规范,统一了用法,原生提供了Promise对象。它支持链式调用
,同时解决了回调地狱
的问题。
二、Promise的基本用法
Promise的构造函数接收一个参数,是函数
,并且传入两个参数:resolve
,reject
,分别表示异步操作执行成功后的回调函数和异步操作执行失败后的回调函数。
let p = new Promise(function(resolve, reject){
//做一些异步操作
setTimeout(function(){
console.log('执行完成');
resolve('随便什么数据');
}, 2000);
});
Promise的三种状态
:默认情况下是等待状态pending
,成功为fullfiled/resolved
,失败为rejected
。同时状态只能由pending变为fullfiled或rejected,且只能改变一次
。
PromiseState:实例对象的一个属性PromiseState
,保存Promise对象的状态
照标准来讲,resolve
是将Promise的状态置为fullfiled,reject
是将Promise的状态置为rejected。throw
关键字也可以将状态置为rejected。
Promise内部的代码是同步调用的:
let p = new Promise(function (resolve, reject) {
//同步调用
console.log(111);
});
console.log(222);
执行结果如下:
三、对象方法:then
方法和catch
方法
1.Promise.prototype.then方法
then中有2个参数,第一个参数是状态变为成功后应该执行的回调函数
,第二个参数是状态变为失败后应该执行的回调函数
。
p.then((value)=>{
console.log('成功'+value)
},(reason)=>{
console.log('失败'+reason)
})
then并且会拿到我们在调用resolve时传的的参数。
PromiseResult:实例对象的一个属性PromiseResult
,保存Promise对象成功或失败的结果
Promise指定多个then后,都会执行回调函数:
let p1 = new Promise((resolve,rejcet)=>{
resolve('ok')