Promise是ES6中新增的一种异步编程的解决方案,用于处理异步操作。Promise对象代表一个异步操作的最终完成或失败,并返回相应的结果值。
Promise有以下特点:
-
Promise对象是异步执行的,即Promise对象本身不会阻塞主线程的执行。
-
一个Promise对象只能有一个结果或错误,一旦Promise对象的状态发生变化,状态就不会再变化。
-
Promise对象可链式调用,通过返回新的Promise实例实现。
-
Promise对象可以通过then()方法获取异步操作的结果,也可以通过catch()方法捕获可能出现的错误。
1)需要传递一个回调函数作为参数:
回调函数可以接收两个参数(函数):
resolve 调用之后,可以将promise的状态修改为成功
reject 调用之后,可以将promise的状态修改为失败
2)内部保存异步操作
const p=new Promise((resolve,reject)=>{
//异步
setTimeout(()=>{
resolve('你好欢迎回来');//修改promise的状态 成功
//reject('很抱歉未成功');
},1000);
});
3)有三种状态:
pending 进行中
Promise {<pending>}
[[Prototype]]: Promise
[[PromiseState]]: "pending"//进行中
[[PromiseResult]]: undefined
fulfilled 已成功
Promise:
[[Prototype]]:Promise
[[PromiseState]]:"fulfilled"//成功
[[PromiseResult]]: undefined
rejected 已失败
Promise {<pending>}
[[Prototype]]: Promise
[[PromiseState]]: "rejected"//失败
[[PromiseResult]]: undefined
4)状态一旦改变,不可逆:
pending---- fulfilled resolved 成功
pending----rejected rejected 失败
p.then((msg)=>{//成功的回调
console.log('成功:',msg);//你好欢迎回来
},(err)=>{//失败的回调
console.log('失败:',err);//很抱歉未成功
})
5)一旦执行,不可取消。立即执行:
其中,Promise构造函数接收一个函数作为参数,函数中包含异步操作逻辑,并根据操作结果调用resolve(成功)或reject(失败)函数。then方法用于指定成功的回调函数,catch方法用于指定失败的回调函数。
Promise还提供了其他方法,如all、race、finally等,用于多个异步操作的处理。使用Promise能够更好地管理异步代码和处理异步操作的错误,是ES6中重要的新增特性。