update: Promise的静态方法

This commit is contained in:
qianguyihao 2021-05-23 18:51:05 +08:00
parent 63b59a4d5f
commit 83891011d0
3 changed files with 79 additions and 99 deletions

View File

@ -448,7 +448,15 @@ promiseB
## 处理 reject 失败状态的两种写法
我们有两种写法可以捕获并处理 reject 异常状态这两种写法的代码举例如下
我们有两种写法可以捕获并处理 reject 异常状态
- 写法 1通过 catch 方法捕获 状态变为已 reject 时的 promise
- 写法 2then 可以传两个参数个参数为 resolve 后执个参数为 reject 后执
### 代码格式
这两种写法的**代码格式**如下
```js
// 第一步model层的接口封装
@ -498,6 +506,57 @@ try-catch 主要用于捕获异常,注意,这里的异常是指**同步**函
2写法 1 `promiseA().then().catch()``promiseA().catch().then()`区别在于前者可以捕获到 `then` 里面的异常后者不可以
### 代码举例
这两种写法的**代码举例**如下
```js
function promiseA() {
return new Promise((resolve, reject) => {
// 这里做异步任务(比如 ajax 请求接口,或者定时器)
...
...
});
}
// 写法1
promiseB()
.then((res) => {
// 从 resolve 获取正常结果
console.log('接口请求成功时,走这里');
console.log(res);
})
.catch((err) => {
// 从 reject 获取异常结果
console.log('接口请求失败时,走这里');
console.log(err);
})
.finally(() => {
console.log('无论接口请求成功与否,都会走这里');
});
// 写法 2和写法 1 等价)
promiseB()
.then(
(res) => {
// 从 resolve 获取正常结果
console.log('接口请求成功时,走这里');
console.log(res);
},
(err) => {
// 从 reject 获取异常结果
console.log('接口请求失败时,走这里');
console.log(err);
}
)
.finally(() => {
console.log('无论接口请求成功与否,都会走这里');
});
```
**代码解释**写法 1 和写法 2 的作用是完全等价的只不过写法 2 是把 catch 里面的代码作为 then 里面的第二个参数而已
## 总结
了解这些内容之后 你已经对 Promise 有了基本了解下一篇文章我们来讲一讲 Promise 在实战开发的常见用法

View File

@ -99,7 +99,7 @@ new Promise((resolve, reject) => {
怎么个封装法呢上面的代码中每次在 return 一个 promise 的时候只是 url 地址不一样其他的代码是一样的所以我们可以把重复的代码封装成函数写法如下
### Promise 链式调用封装写法
### Promise 链式调用封装一个接口
针对同一个接口的多次嵌套调用采用 promise 封装后的写法如下
@ -162,7 +162,7 @@ getPromise('a.json')
但是真正在实战中我们往往需要嵌套请求**多个不同的接口**要处理的 resolve reject 的时机往往是不同的所以需要分开封装不同的 Promise 实例这在实战开发中更为常见代码应该是像下面这样写
### Promise 链式调用封装写法多个接口
### Promise 链式调用封装多个接口
针对多个不同接口的嵌套调用采用 promise 封装后的写法如下
@ -322,7 +322,7 @@ getPromise('a.json')
### 统一处理 reject
针对 abc 这三个请求不管哪个请求失败希望做统一处理这种代码要怎么写呢?我们可以在最后面写一个 catch
针对 abc 这三个请求不管哪个请求失败希望做统一处理这种代码要怎么写呢?我们可以在最后面写一个 catch
代码举例如下
@ -347,11 +347,11 @@ getPromise('a.json')
});
```
上面的代码中由于是统一处理多个请求的异常所以只要有一个请求失败了就会马上走到 catch剩下的请求就不会继续执行了比如说
上面的代码中由于是统一处理多个请求的异常所以**只要有一个请求失败了就会马上走到 catch**剩下的请求就不会继续执行了比如说
- a 请求失败走到 catch不执行 b c
- a 请求失败然后会走到 catch不执行 b c
- a 请求成功b 请求失败走到 catch不执行 c
- a 请求成功b 请求失败然后会走到 catch不执行 c
## return 的返回值

View File

@ -1,9 +1,11 @@
## Promise 的常用API分类
### Promise的实例方法
## Promise 的常用 API实例方法重要
**实例方法**我们需要先 new 一个 promise实例对象然后通过 promise对象去调用 `then``catch``finally`方法这几个方法就是 Promise 的实例方法
Promise 自带API 提供了如下实例方法
具体来说Promise 自带API 提供了如下实例方法
- promise.then()获取异步任务的正常结果
@ -11,103 +13,22 @@ Promise 自带的 API 提供了如下实例方法:
- promise.finaly()异步任务无论成功与否都会执行
代码举例如下
写法 1
### Promise的静态方法
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<script>
function queryData() {
return new Promise((resolve, reject) => {
setTimeout(function () {
var data = { retCode: 0, msg: 'qianguyihao' }; // 接口返回的数据
if (data.retCode == 0) {
// 接口请求成功时调用
resolve(data);
} else {
// 接口请求失败时调用
reject({ retCode: -1, msg: 'network error' });
}
}, 100);
});
}
**静态方法**可以直接通过大写的`Promise.xxx`调用的方法这里的`xxx`就称之为静态方法
queryData()
.then((data) => {
// 从 resolve 获取正常结果
console.log('接口请求成功时,走这里');
console.log(data);
})
.catch((data) => {
// 从 reject 获取异常结果
console.log('接口请求失败时,走这里');
console.log(data);
})
.finally(() => {
console.log('无论接口请求成功与否,都会走这里');
});
</script>
</body>
</html>
```
具体来说Promise 的自带API 提供了如下静态方法
写法 2和上面的写法 1 等价
- `Promise.resolve()`
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<script>
function queryData() {
return new Promise((resolve, reject) => {
setTimeout(function () {
var data = { retCode: 0, msg: 'qianguyihao' }; // 接口返回的数据
if (data.retCode == 0) {
// 接口请求成功时调用
resolve(data);
} else {
// 接口请求失败时调用
reject({ retCode: -1, msg: 'network error' });
}
}, 100);
});
}
- `Promise.reject()`
queryData()
.then(
(data) => {
// 从 resolve 获取正常结果
console.log('接口请求成功时,走这里');
console.log(data);
},
(data) => {
// 从 reject 获取异常结果
console.log('接口请求失败时,走这里');
console.log(data);
}
)
.finally(() => {
console.log('无论接口请求成功与否,都会走这里');
});
</script>
</body>
</html>
```
- `Promsie.all()`
**注意**写法 1 和写法 2 的作用是完全等价的只不过写法 2 是把 catch 里面的代码作为 then 里面的第二个参数而已
- `Promise.race`
前面的几篇文章讲的都是 Promise的**实例方法**今天这篇文章我们来详细讲一下 Promise的**静态方法**
## Promise 的常用 API对象方法重要