PromiseApi的使用

API为处理异步操作而生

一、promiseAll(promiseArr)

1
2
3
4
5
promiseArr: 包含 n 个 promise 的数组
说明: 返回一个新的 promise, 只有所有的 promise`都成功才成功`且成功的value是所有promise成功的value的数组, 只要有一 个失败了就直接失败。
--》并且只要检测到失败的,就##立即返回##失败的promise


二、Promise.Race(promiseArr)

promiseArr: 包含 n 个 promise 的数组
说明: 返回一个新的 promise, 第一个完成的 promise 的结果状态就是最终的结果状态,
和all方法一样,获取到当第一个完成的 promise 的结果状态,就立即返回 */

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
37
38

1. Promise 构造函数:new Promise(executor)
executor 函数:是同步执行的,(resolve, reject) => { }
resolve 函数:调用 resolve 将 Promise 实例内部状态改为成功(fulfiled)。
reject 函数:调用 reject 将 Promise 实例内部状态改为失败(rejected)。
说明:executor 函数会在 Promise 内部立即同步调用,异步代码放在 executor 函数中。

2. Promise.prototype.then 方法:Promise 实例.then(onFulfilled, onRejected)
onFulfilled:成功的回调函数 —— (value) => { }
onRejected:失败的回调函数 —— (reason) => { }
注意:then 方法会返回一个新的 Promise 实例对象。

3.Promise.prototype.catch(onRejected) 方法
(1) onRejected 函数: 失败的回调函数(reason) => { }
说明: then()的语法糖, 相当于: then(undefined, onRejected)
(2) 异常穿透使用: 当运行到最后, 没被处理的所有异常错误都会进入这个方法的回调函数中
const promise = new Promise((resolve, reject) => {
reject(new Error('失败原因'));
});
// promise.then(
// undefined, //成功的回调可以是undefined
// (reason) => { console.log(`失败原因:${reason}`); } //失败的回调必须有,否则会报错
// );
// then()的语法糖
promise.catch((reason) => { console.log(`失败原因:${reason}`); })

// 关于then()的成功回调为undefined问题
new Promise((resolve, reject) => {
resolve('成功的value');
}).then(
undefined, //成功的回调undefined,但是Promise底层做了处理,加上了成功回调 value => value
(reason) => { console.log('失败原因:', reason); }
).then(
(value) => { console.log('成功的value:', value); },
(reason) => { console.log('失败原因:', reason); }
)