Skip to content

Commit efdfb2e

Browse files
committed
add README.md
1 parent b7652ea commit efdfb2e

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

README.md

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# 玩转 async/await
2+
3+
## 课程介绍
4+
5+
通过这门课程能学习如何使用 ES2017 中的 `async/await` 特性编写出相比于 `promise chain``callback hell` 更容易阅读理解的代码。`await` 关键字接收一个 `promise`,终止代码的执行,直到 `promise` 状态变为 `resolved` 或者 `rejected`,这种特性能让我们的异步代码阅读起来更像是同步代码。
6+
7+
打开本课程,你将会从编写简单的 `async/await` 函数开始,逐步学会如何结合 `promise``await` 关键字,如何定义不同类型的 `async` 函数,如何处理错误,如何让 `await` 代码串行或并行,如何在循环中正确使用 `await`等。
8+
9+
## 适用人群
10+
11+
* [`required`]具备 `JS` 基础知识,知道如何运行 `Node.js` 脚本;
12+
* [`required`]知道 `Callback``Promise` 等异步处理概念;
13+
* [`optional`]期望学习新的异步特性,编写更简洁易懂已维护的代码;
14+
* [`optional`]期望不断打磨自己的 `JS` 技能,让自己变得更值钱;
15+
16+
## 内容目录
17+
18+
### 1. 编写第一个 `async/await` 函数
19+
20+
手把手教你把发起 `HTTP` 请求并解析响应的代码改写成 `async/await` 风格,让你学会 `async/await` 的基本语法。
21+
22+
### 2. 将 `async` 函数用在 `promise chain`
23+
24+
代理探索如何在 `promise chain` 中就像使用其他 `promise` 一样无缝使用 `async` 函数。
25+
26+
### 3. 把任意类型的函数转成 `async` 风格
27+
28+
实例演示如何将任意函数写成 `async` 风格,包括函数声明、函数表达式、箭头函数、类方法、对象方法等。
29+
30+
### 4. 处理 `async` 函数中的错误
31+
32+
不同于 `promise` 中的 `.catch()` 错误处理机制,在 `async` 函数中,我们需要使用 `try/catch` 结构来恰当的处理错误。
33+
34+
### 5. 正确处理多个 `await` 操作的并行串行
35+
36+
学会通过移动 `await` 关键词的位置实现多个 `await` 操作串行或者并行,并且用数据证明让多个异步操作并行的性能优势。
37+
38+
### 6. 使用 `Promise.all()` 让多个 `await` 操作并行
39+
40+
学会使用 ES2015 中的解构和 `Promise.all()` 实现多个异步操作的并行,非常适合需要同时发起多个请求的情形,代码可读性不打折扣。
41+
42+
### 7. 结合 `await` 和任意兼容 `.then()` 的代码
43+
44+
`await` 操作符并不仅仅局限于 `ES2015``promise`,可以和任意兼容 `.then()` 方法的代码使用,通过实例学会如何与流行的 Promise 库结合使用。
45+
46+
### 8. 在 `for` 循环中正确的使用 `await`
47+
48+
理解 `for` 循环中 `await` 不同写法带来的性能影响,以及改进的方法。
49+
50+
## 源码链接
51+
52+
代码仓库:[wangshijun/course-javascript-async-await](https://github.com/wangshijun/course-javascript-async-await)
53+
54+
运行方法(请确保系统中安装了 [Node.js](https://nodejs.org/en/)):
55+
56+
```shell
57+
git clone https://github.com/wangshijun/course-javascript-async-await.git
58+
cd course-javascript-async-await
59+
node xxx.js
60+
```
61+
62+
上面的 `xxx.js` 对应没节课程的源码,列表如下:
63+
64+
1. [编写第一个 `async/await` 函数](https://github.com/wangshijun/course-javascript-async-await/blob/master/01-first-async-await-function.js)
65+
1. [`async` 函数用在 `promise chain`](https://github.com/wangshijun/course-javascript-async-await/blob/master/02-use-async-function-as-promise.js)
66+
1. [把任意类型的函数转成 `async` 风格](https://github.com/wangshijun/course-javascript-async-await/blob/master/03-convert-any-function-into-async.js)
67+
1. [处理 `async` 函数中的错误](https://github.com/wangshijun/course-javascript-async-await/blob/master/04-handling-errors-for-async.js)
68+
1. [正确处理多个 `await` 操作的并行串行](https://github.com/wangshijun/course-javascript-async-await/blob/master/05-await-multiple-promise-seq-or-concurrently.js)
69+
1. [使用 `Promise.all()` 让多个 `await` 操作并行](https://github.com/wangshijun/course-javascript-async-await/blob/master/06-await-multiple-promise-with-all.js)
70+
1. [结合 `await` 和任意兼容 `.then()` 的代码](https://github.com/wangshijun/course-javascript-async-await/blob/master/07-use-await-with-any-thenable.js)
71+
1. [`for` 循环中正确的使用 `await`](https://github.com/wangshijun/course-javascript-async-await/blob/master/08-await-in-loops.js)
72+
73+
## 运行环境
74+
75+
* Node.js v8.6.0
76+
* VSCode v1.17.1 + Vim
77+
78+
## 参考资料
79+
80+
* [Google Web Fundamentals](https://developers.google.com/web/fundamentals/getting-started/primers/async-functions)

0 commit comments

Comments
 (0)