今天查看了一下promise的文档,写了一些例子,方便理解promise

#首先是promise对resolve,reject的处理
resolve相当于success
reject相当于error

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
new Promise((resolve,reject)=>{
console.log("promise第一步,使用resolve报给.then")
resolve(1)
}).then((result)=>{
return new Promise((resolve,reject)=>{
console.log("promise第二步,拿到第一步结果是",result,"这里是使用resolve报数的结果,相当于success");
console.log("接下来我们使用reject报数")
reject(2)
})
}).then((result)=>{
return new Promise((resolve,reject)=>{
console.log("promise第三步,拿到第二步结果是",result,"这里是使用resolve报数的结果,相当于success");
resolve(3)
})
},(result)=>{
return new Promise((resolve,reject)=>{
console.log("promise第三步,拿到第二步结果是",result,"这里是使用reject报数的结果,相当于error");
console.log(".then的成功与失败都演示了,下面试.catch")
reject("使用reject报数,若下一层.then写了失败的方法,会给下一层的失败的方法,否则会给.catch")
})
}).then((result)=>{
return new Promise((resolve,reject)=>{
console.log("楼上的如果使用resolve报数,就是success的会走这个")
})
}).catch((result)=>{
console.log("由于上一层.then只写了成功后的方法,失败后的没有写,所以报错了,报错后,我们就用。catch来接收")
console.log("<--------------------下面是promise.catch的内容,收到了楼上扔出的异常------------------------>")
console.log("",result)

return new Promise((resolve,reject)=>{
console.log("楼下尝试finally,但是很多浏览器可能不支持")
resolve("楼上扔给楼下finally的resolve")
})
}).finally((result)=>{//resolve或者reject调用结束后,都会调用这个
console.log(result)
})

#下方是Promise.all
Promise.all(array),此方法接收一个promise对象的数组,数组中都需要时promise对象,其中数组中的对象全部使用resolve报数的,.then中会执行callback1也就是成功,如果有使用reject报数的话,就会执行callback2,也就是失败

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

console.log("promise.all开始");
Promise.all([
new Promise((resolve, reject) => {
console.log("promise.all-1-1,resolve")
resolve(1)
}),new Promise((resolve, reject) => {
console.log("promise.all-1-2,resolve,这里在定时器里报数")
setTimeout(()=>{
resolve(2)
})
}),new Promise((resolve, reject) => {
console.log("promise.all-1-3,resolve")
resolve(3)
}),
]).then((result)=>{//全部使用resolve报数的会走这里
console.log("<--------------------第一个promise.then.success开始了------------------------>")
console.log("promise.all必须是数组中全部的数据都报出结果后才会执行.then,全部使用resolve报数的会走这里,由于上方使用了定时器,所以这个必须等三个都报数后才可以触发")
console.log("第一个promise.then中报出的结果",result);
},(result)=>{//有reject报数的会走这里
console.log("<--------------------第一个promise.then.error开始了------------------------>")
console.log("promise.all必须是数组中全部的数据都报出结果后才会执行.then,有reject报数的会走这里")
console.log("第一个promise.then中报出的结果",result);
})

Promise.race与Promise.all类似,不同的是,Promise.race是数组对象中,有一个数据先到,就执行.then,根据先到的promise的成功与失败,执行对应的事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Promise.race([
new Promise((resolve, reject) => {
console.log("promise.all-1-1,resolve")
resolve(1)
}), new Promise((resolve, reject) => {
setTimeout(() => {
console.log("promise.all-1-2,resolve,这里在定时器里报数")
resolve(2)
}, 1000)
}), new Promise((resolve, reject) => {
setTimeout(() => {
console.log("promise.all-1-3,resolve")
resolve(3)
},1000)
}),
]).then((result) => { //第一个收到的结果是resolve报数的会走这里

console.log(".race为,只要有一个报数,就执行,这里是resolve")
}, (result) => { //第一个收到的结果是reject报数的会走这里

console.log(".race为,只要有一个报数,就执行,这里是reject")
})

这些大概就是promise相关的东西,如有错误,欢迎交流指正