跳到主要内容

认识

2023年06月16日
柏拉文
越努力,越幸运

一、认识


Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它就是为了解决回调函数产生的问题而诞生的。

二、语法


new Promise((resolve,reject)=>{
if(true){
resolve(1);
}else{
reject(2);
}
}).then(res=>{
console.log(res);
}).catch(error=>{
console.log(error)
});

三、特点


3.1 状态

Promise对象代表一个异步操作,有三种状态:

  • pending(进行中)

  • fulfilled(已成功)

  • rejected(已失败)

Promise 状态一旦改变, 就不会在变。Promise 的状态改变,只有两种可能: 从 pending 变为 fulfilled 和从 pending 变为 rejected。只要这两种情况发生, 状态就凝固了,不会再变了。

Promise 改变状态的方式有以下三种:

  • resolve(): 将PromisePending状态置为Fulfilled

  • reject(): 用于将PromisePending状态置为Rejected

  • throw(): 用于将PromisePending状态置为Rejected

3.2 弊端

  1. 无法取消 Promise,一旦新建 new Promise 就会立即执行,无法中途取消。

  2. 如果不设置回调函数, Promise 内部抛出的错误,不会反应到外部。

  3. 当处于 pending 状态时, 无法得知目前进展到了哪一阶段(刚刚开始还是即将完成)

四、检测


描述 检测环境是否支持 Promise

function isNative(Ctor){
return typeof Ctor === 'function' && /native code/.test(Ctor.toString());
}

function isSupportPromise(){
return typeof Promise !== 'undefined' && isNative(Promise);
}