File tree Expand file tree Collapse file tree 3 files changed +35
-8
lines changed Expand file tree Collapse file tree 3 files changed +35
-8
lines changed Original file line number Diff line number Diff line change @@ -118,6 +118,25 @@ loader.next()
118
118
119
119
上面代码表示,第一次调用loadUI函数时,该函数不会执行,仅返回一个遍历器。下一次对该遍历器调用next方法,则会显示Loading界面,并且异步加载数据。再一次使用next方法,则会隐藏Loading界面。可以看到,这种写法的好处是所有Loading界面的逻辑,都被封装在一个函数,按部就班非常清晰。
120
120
121
+ 下面是另一个例子,通过Generator函数逐行读取文本文件。
122
+
123
+ ``` javascript
124
+
125
+ function * numbers () {
126
+ let file = new FileReader (" numbers.txt" );
127
+ try {
128
+ while (! file .eof ) {
129
+ yield parseInt (file .readLine (), 10 );
130
+ }
131
+ } finally {
132
+ file .close ();
133
+ }
134
+ }
135
+
136
+ ```
137
+
138
+ 上面代码打开文本文件,使用yield语句可以手动逐行读取文件。
139
+
121
140
总结一下,如果某个操作非常耗时,可以把它拆成N步。
122
141
123
142
``` javascript
Original file line number Diff line number Diff line change @@ -190,7 +190,20 @@ p.then(function (s){
190
190
191
191
async函数是用来取代回调函数的另一种方法。
192
192
193
- 只要函数名之前加上async关键字,就表明该函数内部有异步操作。该异步操作应该返回一个promise对象,前面用await关键字注明。当函数执行的时候,一旦遇到await就会先返回,等到触发的异步操作完成,再接着执行函数体内后面的语句。
193
+ 只要函数名之前加上async关键字,就表明该函数内部有异步操作。该异步操作应该返回一个Promise对象,前面用await关键字注明。当函数执行的时候,一旦遇到await就会先返回,等到触发的异步操作完成,再接着执行函数体内后面的语句。
194
+
195
+ ``` javascript
196
+
197
+ async function getStockPrice (symbol , currency ) {
198
+ let price = await getStockPrice (symbol);
199
+ return convert (price, currency);
200
+ }
201
+
202
+ ```
203
+
204
+ 上面代码是一个获取股票报价的函数,函数前面的async关键字,表明该函数将返回一个Promise对象。调用该函数时,当遇到await关键字,立即返回它后面的表达式(getStockPrice函数)产生的Promise对象,不再执行函数体内后面的语句。等到getStockPrice完成,再自动回到函数体内,执行剩下的语句。
205
+
206
+ 下面是一个更一般性的例子。
194
207
195
208
``` javascript
196
209
@@ -205,14 +218,8 @@ async function asyncValue(value) {
205
218
return value;
206
219
}
207
220
208
- (async function () {
209
- var value = await asyncValue (42 );
210
- assert .equal (42 , value);
211
- done ();
212
- })();
213
-
214
221
```
215
222
216
- 上面代码中,asyncValue函数前面有async关键字,表明函数体内有异步操作。执行的时候,遇到await语句就会先返回,等到timeout函数执行完毕,再返回value。后面的匿名函数前也有async关键字,表明该函数也需要暂停,等到await后面的 ` asyncValue(42) ` 得到值以后,再执行后面的语句。
223
+ 上面代码中,asyncValue函数前面有async关键字,表明函数体内有异步操作。执行的时候,遇到await语句就会先返回,等到timeout函数执行完毕,再返回value。
217
224
218
225
async函数并不属于ES6,而是被列入了ES7,但是traceur编译器已经实现了这个功能。
Original file line number Diff line number Diff line change 41
41
- Jake Archibald, [ JavaScript Promises: There and back again] ( http://www.html5rocks.com/en/tutorials/es6/promises/ )
42
42
- Tilde, [ rsvp.js] ( https://github.com/tildeio/rsvp.js )
43
43
- Sandeep Panda, [ An Overview of JavaScript Promises] ( http://www.sitepoint.com/overview-javascript-promises/ ) : ES6 Promise入门介绍
44
+ - Jafar Husain, [ Async Generators] ( https://docs.google.com/file/d/0B4PVbLpUIdzoMDR5dWstRllXblU/view?sle=true ) : 对async与Generator混合使用的一些讨论
44
45
45
46
## 工具
46
47
You can’t perform that action at this time.
0 commit comments