update: Promise.all 和 Promise.race
This commit is contained in:
parent
cd7b5b2d60
commit
8268cf5150
@ -280,7 +280,7 @@ getPromise('a.json')
|
||||
打印结果:
|
||||
|
||||
```
|
||||
'a: err
|
||||
a: err
|
||||
undefined
|
||||
c:success
|
||||
```
|
||||
@ -365,7 +365,7 @@ return 后面的返回值,有两种情况:
|
||||
|
||||
### 情况 1:返回 Promise 实例对象
|
||||
|
||||
举例如下:(这个例子,跟上一段 Ajax 链式调用 的例子差不多)
|
||||
举例如下:
|
||||
|
||||
```js
|
||||
getPromise('a.json')
|
||||
|
@ -24,7 +24,7 @@ Promise 的自带 API 提供了如下静态方法:
|
||||
|
||||
- `Promsie.all()`:并发处理多个异步任务,所有任务都执行成功,才算成功(走到 resolve);只要有一个失败,就会走到 reject,整体都算失败。
|
||||
|
||||
- `Promise.race()`:并发处理多个异步任务,返回的是第一个执行完成的 promise,且状态和第一个任务的状态保持一致。
|
||||
- `Promise.race()`:并发处理多个异步任务,返回的是第一个执行完成的 promise,且状态和第一个完成的任务状态保持一致。
|
||||
|
||||
前面的几篇文章,讲的都是 Promise 的**实例方法**;今天这篇文章,我们来详细讲一下 Promise 的**静态方法**。
|
||||
|
||||
@ -208,7 +208,7 @@ Promise.all([promise1, promise2, promise3])
|
||||
|
||||
## Promise.race()
|
||||
|
||||
`Promise.race([p1, p2, p3])`:并发处理多个异步任务,返回的是第一个执行完成的 promise,且状态和第一个任务的状态保持一致。参数里传的是多个 promise 实例组成的数组。
|
||||
`Promise.race([p1, p2, p3])`:并发处理多个异步任务,返回的是第一个执行完成的 promise,且状态和第一个完成的任务状态保持一致。参数里传的是多个 promise 实例组成的数组。
|
||||
|
||||
上面这句话,第一次读时,可能很绕口。我说的再通俗一点:在多个同时执行的异步任务中,先找出哪个异步任务**最先执行完成**(无论是走到 resolve,还是走到 reject,都算执行完成)。然后,整体的状态跟这个任务保持一致。如果这个任务执行成功,那整体就算成功(走到 then);如果这个任务执行失败,那整体就算失败(走到 catch)。
|
||||
|
||||
@ -216,7 +216,7 @@ Promise.all([promise1, promise2, promise3])
|
||||
|
||||
我刚开始学 Promise.race()的时候,误以为它的含义是“只要有一个异步执行成功,整体就算成功(走到 then);所有任务都执行失败,整体才算失败(走到 catch)”。现在想来,真是大错特错,过于懵懂。
|
||||
|
||||
我们来看看各种场景的打印结果,便能让你擦干泪水。
|
||||
我们来看看各种场景的打印结果,便能让你擦干泪水,继续前行。
|
||||
|
||||
### 语法举例
|
||||
|
||||
@ -246,12 +246,12 @@ const promise3 = new Promise((resolve, reject) => {
|
||||
|
||||
Promise.race([promise1, promise2, promise3])
|
||||
.then((res) => {
|
||||
// 只要有一个异步任务执行成功,就会走到这里
|
||||
// 第一个完成的任务,如果执行失败,就会走到这里
|
||||
// 这里拿到的 res,是第一个成功的 promise 返回的结果,不是数组
|
||||
console.log(JSON.stringify(res));
|
||||
})
|
||||
.catch((err) => {
|
||||
// 所有异步任务异步都执行失败,才会走到这里
|
||||
// 第一个完成的任务,如果执行失败,就会走到这里
|
||||
console.log(err);
|
||||
});
|
||||
```
|
||||
|
Loading…
Reference in New Issue
Block a user