认识
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()
: 将Promise的Pending
状态置为Fulfilled
-
reject()
: 用于将Promise的Pending
状态置为Rejected
-
throw()
: 用于将Promise的Pending
状态置为Rejected
3.2 弊端
-
无法取消
Promise
,一旦新建new Promise
就会立即执行,无法中途取消。 -
如果不设置回调函数,
Promise
内部抛出的错误,不会反应到外部。 -
当处于
pending
状态时, 无法得知目前进展到了哪一阶段(刚刚开始还是即将完成)
四、检测
描述 检测环境是否支持 Promise
function isNative(Ctor){
return typeof Ctor === 'function' && /native code/.test(Ctor.toString());
}
function isSupportPromise(){
return typeof Promise !== 'undefined' && isNative(Promise);
}