浅谈 promise
Promise 对象代表一个异步操作
状态
- pending 准备状态
- fulfilled 操作成功 resolved
- rejected 操作失败
特点
- promise是单一状态,一旦状态确定就不会在发生改变
- 只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态,只有两种可能从pending => resolved 或者 pending => rejected
- 是链式调用.then.then的方式这样就避免出现回调地狱了,但是如果链式过多也会不好看,所以后面又推出了async await就更形象了 async相当于new promise的封装 await相当于.then的封装
let p1 = new Promise((resove,reject)=>{
resove("成功");
// reject("失败");
});
new Promise((resolve,reject)=>{
resolve("成功了");//此时决定执行then还是catch是看resolve和reject谁在前面
reject("失败了");//单一状态,此时是不会触发catch里面的方法的 因为resove已经触发了then里的方法
}).then((msg)=>{
console.log("我是then方法"+msg);
}).catch((error)=>{
console.log("我是catch方法"+error);
});
缺点
- 无法取消,一旦新建它就会执行无法中途取消
- 状态不完全明确,当在pending时 不知当前状态是刚刚开始还是即将完成
基本语法
new Promise((resove,reject)=>{
resove("成功的原因");
// reject("拒绝的原因");
})
.then(
null,re=>{
//用null进行占位成功的回调
console.log(re);
}//没有成功状态,但必须有第一个参数只会输出失败的信息
).then(//.then返回以后还是一个promise对象
value=>{
console.log(value);//此时这里会输出"成功的原因",因为在上一个then没用成功回调
},//成功时输出
reason=>{
console.log(reason);
},//失败时输出
);
new Promise((resove,reject)=>{
// resove("成功的原因");
reject("拒绝的原因");
})
.then(
null,re=>{
//用null进行占位成功的回调
console.log(re);
}//没有成功状态,但必须有第一个参数只会输出失败的信息
).then(//.then返回以后还是一个promise对象
value=>{
//此时这里会输出成功,虽然上边执行的是reject,但这里是上边.then返回的promise对象,没有resove和reject的情况下默认回调成功
console.log("成功");
},//成功时输出
reason=>{
console.log(reason);
},//失败时输出
);
var promise = new Promise(function(resolve, reject) {