Promise中的API
PromiseState
实例对象中的一个属性【Promisestate】 状态
pending 未决定
resolved / fullfilled 成功
rejected 失败
-
pending 变为resolved
-
pending 变为rejected
说明:只有这2种,且一个promise对象只能改变一次
无论变为成功还是失败,都会有一个结果数据
成功的结果数据一般称为value,失败的结果数据一般称为reason
PromiseResult
实例对象中的另一个属性【PromiseResult】
保存着异步任务『成功/失败』的结果
通过resolve
reject 来改变
promise的基本流程
Promise中的API
1.Promise构造函数: Promise (excutor){}
(1)executor函数:执行器(resolve, reject)=>
(2)resolve函数:内部定义成功时我们调用的函数value =>{}
(3)reject函数;内部定义失败时我们调用的函数reason =>{}
说明: executor会在 promise内部立即同步调用,异步操作在执行器中执行
<script>
let p = new Promise((resolve, reject) => {
//同步调用,立即执行
resolve('OK');
})
//再调用外部
</script>
2.Promise.prototype.then方法:(onResolved, onRejected) =>{}
(1)onResolved,函数:成功的回调函数(value)=>{}
(2)onRejected函数:失败的回调函数(reason)=>{}
说明:指定用于得到成功value的成功回调和用于得到失败reason的失败回调
返回一个新的promise对象
3.Promise.prototype.catch方法:(onRejected)=>{}
(1) onRejected函数:失败的回调函数(reason) =>{}
<script>
let p = new Promise((resolve, reject) => {
//同步调用,立即执行
// resolve('OK');
//修改promise对象状态
reject('error');
})
//再调用外部
//执行catch方法
p.catch(reason => {
console.log(reason);
})
</script>
4.Promise.resolve方法: (value) =>{}
(1)value:成功的数据或promise对象
说明:返回一个成功/失败的promise对象
<script>
let p = Promise.resolve(114);
console.log(p);
</script>
//如果传入参数为非promise类型的对象,返回的结果为成功promise对象
//如果传入的参数为promise对象,则参数的结果决定了resolve的结果
<script>
let p = Promise.resolve(114);
//如果传入参数为非promise类型的对象,返回的结果为成功promise对象
//如果传入的参数为promise对象,则参数的结果决定了resolve的结果
let pc = Promise.resolve(new Promise((resolve, reject) => {
resolve('OK');
}))
console.log(pc);
</script>
let pc = Promise.resolve(new Promise((resolve, reject) => {
// resolve('OK');
reject('error');
}))
console.log(pc);
添加catch捕获错误回调,解决报错
let pc = Promise.resolve(new Promise((resolve, reject) => {
// resolve('OK');
reject('error');
}))
// console.log(pc);
pc.catch(reason => {
console.log(reason);
})
5.Promise.reject方法: (reason) =>{}
(1) reason:失败的原因
说明:返回一个失败的promise对象
<script>
let p = Promise.reject(514);
console.log(p);
</script>
无论传入什么数值,都返回失败的结果(包括传入成功的resolve的promise对象)
这里就不演示了
6.Promise.all方法:(promises)=> {}
(1) promises:包含n 个promise 的数组
说明:返回一个新的 promise,只有所有的promise都成功才成功,只要有一个失败了就直接失败
<script>
let p1 = new Promise((resolve, reject) => {
resolve('OK');
})
let p2 = Promise.resolve('success');
let p3 = Promise.resolve('YES');
const result = Promise.all([p1,p2,p3]);
console.log(result);
</script>
有一个失败时,注意p2改成了reject方法
<script>
let p1 = new Promise((resolve, reject) => {
resolve('OK');
})
let p2 = Promise.reject('FAILED');
let p3 = Promise.resolve('YES');
const result = Promise.all([p1,p2,p3]);
console.log(result);
</script>
7.Promise.race 方法: (promises)=>{}
(1)promises:包含n个promise 的数组
说明:返回一个新的 promise,第一个完成的promise 的结果状态就是最终的结果状态
<script>
let p1 = new Promise((resolve, reject) => {
resolve('OK');
})
let p2 = Promise.resolve('SUCCESS');
let p3 = Promise.resolve('YES');
//调用race
const res = Promise.race([p1,p2,p3]);
console.log(res);
</script>
给p1添加定时器,返回值以p2的状态为准
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('OK');
},1000)
})
[外链图片转存中...(img-Fc6cinsD-1668324418514)]
给p1添加定时器,返回值以p2的状态为准
```js
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('OK');
},1000)
})