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:
parent
ad472cdf6a
commit
aab07bdbc8
@ -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
|
||||
```
|
||||
|
||||
|
@ -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']);
|
||||
|
@ -303,7 +303,7 @@ let obj = {
|
||||
};
|
||||
|
||||
Reflect.ownKeys(obj)
|
||||
// [Symbol(my_key), 'enum', 'nonEnum']
|
||||
// ["enum", "nonEnum", Symbol(my_key)]
|
||||
```
|
||||
|
||||
由于以 Symbol 值作为名称的属性,不会被常规方法遍历得到。我们可以利用这个特性,为对象定义一些非私有的、但又希望只用于内部的方法。
|
||||
|
Loading…
x
Reference in New Issue
Block a user