update: Promise的静态方法
This commit is contained in:
parent
63b59a4d5f
commit
83891011d0
@ -448,7 +448,15 @@ promiseB
|
||||
|
||||
## 处理 reject 失败状态的两种写法
|
||||
|
||||
我们有两种写法可以捕获并处理 reject 异常状态。这两种写法的代码举例如下:
|
||||
我们有两种写法可以捕获并处理 reject 异常状态:
|
||||
|
||||
- 写法 1:通过 catch 方法捕获 状态变为已 reject 时的 promise
|
||||
|
||||
- 写法 2:then 可以传两个参数,第⼀个参数为 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 在实战开发的常见用法。
|
||||
|
@ -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
|
||||
|
||||
针对 a、b、c 这三个请求,不管哪个请求失败,我就希望做统一处理。这种代码要怎么写呢?我们可以在最后面写一个 catch。
|
||||
针对 a、b、c 这三个请求,不管哪个请求失败,我都希望做统一处理。这种代码要怎么写呢?我们可以在最后面写一个 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 的返回值
|
||||
|
||||
|
@ -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:对象方法【重要】
|
||||
|
Loading…
Reference in New Issue
Block a user