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

docs(set): edit set

This commit is contained in:
ruanyf 2016-12-15 15:24:30 +08:00
parent ad472cdf6a
commit aab07bdbc8
3 changed files with 18 additions and 17 deletions

View File

@ -742,9 +742,9 @@ function* somethingAsync(x) {
### 含义
ES7提供了`async`函数,使得异步操作变得更加方便。`async`函数是什么?一句话,`async`函数就是Generator函数的语法糖。
ES2017 标准提供了`async`函数,使得异步操作变得更加方便。
前文有一个Generator函数依次读取两个文件。
`async`函数是什么?一句话,`async`函数就是 Generator 函数的语法糖。前文有一个 Generator 函数,依次读取两个文件。
```javascript
var fs = require('fs');
@ -830,7 +830,7 @@ f().then(
// Error: 出错了
```
2`async`函数返回的Promise对象必须等到内部所有`await`命令的Promise对象执行完才会发生状态改变。也就是说只有`async`函数内部的异步操作执行完,才会执行`then`方法指定的回调函数。
2`async`函数返回的 Promise 对象,必须等到内部所有`await`命令的Promise对象执行完才会发生状态改变,除非遇到`return`语句或者抛出错误。也就是说,只有`async`函数内部的异步操作执行完,才会执行`then`方法指定的回调函数。
下面是一个例子。
@ -844,6 +844,8 @@ getTitle('https://tc39.github.io/ecma262/').then(console.log)
// "ECMAScript 2017 Language Specification"
```
上面代码中,函数`getTitle`内部有三个操作:抓取网页、取出文本、匹配页面标题。只有这三个操作全部完成,才会执行`then`方法里面的`console.log`
3正常情况下`await`命令后面是一个 Promise 对象。如果不是,会被转成一个立即`resolve`的 Promise 对象。
```javascript
@ -1008,8 +1010,6 @@ function spawn(genF) {
}
```
`async`函数是非常新的语法功能,新到都不属于 ES6而是属于 ES7。目前它仍处于提案阶段但是转码器`Babel``regenerator`都已经支持,转码后就能使用。
### async 函数的用法
`async`函数返回一个Promise对象可以使用`then`方法添加回调函数。当函数执行的时候,一旦遇到`await`就会先返回,等到触发的异步操作完成,再接着执行函数体内后面的语句。
@ -1047,7 +1047,7 @@ async function asyncPrint(value, ms) {
asyncPrint('hello world', 50);
```
上面代码指定50毫秒以后输出"hello world"
上面代码指定50毫秒以后输出`hello world`
Async函数有多种使用形式。
@ -1587,3 +1587,4 @@ async function* gen2() {
// a
// b
```

View File

@ -166,7 +166,7 @@ Set结构的实例有四个遍历方法可以用于遍历成员。
**1`keys()``values()``entries()`**
`key`方法、`value`方法、`entries`方法返回的都是遍历器对象详见《Iterator对象》一章。由于Set结构没有键名只有键值或者说键名和键值是同一个值所以`key`方法和`value`方法的行为完全一致。
`keys`方法、`values`方法、`entries`方法返回的都是遍历器对象详见《Iterator 对象》一章)。由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以`keys`方法和`values`方法的行为完全一致。
```javascript
let set = new Set(['red', 'green', 'blue']);

View File

@ -303,7 +303,7 @@ let obj = {
};
Reflect.ownKeys(obj)
// [Symbol(my_key), 'enum', 'nonEnum']
// ["enum", "nonEnum", Symbol(my_key)]
```
由于以 Symbol 值作为名称的属性,不会被常规方法遍历得到。我们可以利用这个特性,为对象定义一些非私有的、但又希望只用于内部的方法。