1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-24 10:22:23 +00:00

docs(async): fixed #1023

This commit is contained in:
ruanyf 2020-11-29 12:23:59 +08:00
parent 584d5d9332
commit 201eebe08f

View File

@ -470,7 +470,7 @@ function dbFuc(db) { //这里不需要 async
}
```
上面代码可能不会正常工作,原因是这时三个`db.post`操作将是并发执行,也就是同时执行,而不是继发执行。正确的写法是采用`for`循环。
上面代码可能不会正常工作,原因是这时三个`db.post()`操作将是并发执行,也就是同时执行,而不是继发执行。正确的写法是采用`for`循环。
```javascript
async function dbFuc(db) {
@ -482,7 +482,7 @@ async function dbFuc(db) {
}
```
另一种方法是使用数组的`reduce`方法。
另一种方法是使用数组的`reduce()`方法。
```javascript
async function dbFuc(db) {
@ -495,7 +495,9 @@ async function dbFuc(db) {
}
```
上面例子中,`reduce`方法的第一个参数是`async`函数,导致该函数的第一个参数是前一步操作返回的 Promise 对象,所以必须使用`await`等待它操作结束。另外,`reduce`方法返回的是`docs`数组最后一个成员的`async`函数的执行结果,也是一个 Promise 对象,导致在它前面也必须加上`await`
上面例子中,`reduce()`方法的第一个参数是`async`函数,导致该函数的第一个参数是前一步操作返回的 Promise 对象,所以必须使用`await`等待它操作结束。另外,`reduce()`方法返回的是`docs`数组最后一个成员的`async`函数的执行结果,也是一个 Promise 对象,导致在它前面也必须加上`await`
这个例子的`reduce()`的第二个参数是`undefined`,并且第一个参数函数里面没有`return`语句,原因是这个例子没有用到累积变量,而且每一轮`async`函数不管有没有`return`语句,总是返回一个 Promise 对象。换句话说,这里的`reduce()`方法不是为了求值,而是为了遍历操作。
如果确实希望多个请求并发执行,可以使用`Promise.all`方法。当三个请求都会`resolved`时,下面两种写法效果相同。