优点:可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,使得控制异步操作更加容易。
缺点:
- 无法取消Promise,一旦新建它就会立即执行,无法中途取消。
- 如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。
- 当处于Pending状态时,无法得知目前进展到哪一个阶段。
promise内部有三种状态,pedding,fulfilled,rejected:
- pedding表示程序正在执行但未得到结果,即异步操作没有执行完毕。
- fulfilled表示程序执行完毕,且执行成功。
- rejected表示执行完毕但失败;这里的成功和失败都是逻辑意义上的;并非是要报错。
promise和回调函数一样,都是要解决数据的传递和消息发送问题,
promise中的then一般对应成功后的数据处理,catch一般对应失败后的数据处理。
举个怀孕例子如图所示:
script代码:
//先创建变量ispregnant,赋值布尔值,表示是否怀孕
const isPregnant = true;
//创建promise变量,new一个promise
//promise里面实行一个函数,可以传入两个参数,分别是resolve和reject
const promise = new Promise((resolve,reject) => {
//用if来判断,怀孕了就用resolve表示,孩子他爹为成功的值
//失败了就用reject表示,老公为失败的值
if(isPregnant) {
resolve('孩子他爹'