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

修改promise/async

This commit is contained in:
ruanyf 2014-06-08 13:05:56 +08:00
parent 75b88c3ba5
commit 0a6ad94871
3 changed files with 35 additions and 8 deletions

View File

@ -118,6 +118,25 @@ loader.next()
上面代码表示第一次调用loadUI函数时该函数不会执行仅返回一个遍历器。下一次对该遍历器调用next方法则会显示Loading界面并且异步加载数据。再一次使用next方法则会隐藏Loading界面。可以看到这种写法的好处是所有Loading界面的逻辑都被封装在一个函数按部就班非常清晰。
下面是另一个例子通过Generator函数逐行读取文本文件。
```javascript
function *numbers() {
let file = new FileReader("numbers.txt");
try {
while(!file.eof) {
yield parseInt(file.readLine(), 10);
}
} finally {
file.close();
}
}
```
上面代码打开文本文件使用yield语句可以手动逐行读取文件。
总结一下如果某个操作非常耗时可以把它拆成N步。
```javascript

View File

@ -190,7 +190,20 @@ p.then(function (s){
async函数是用来取代回调函数的另一种方法。
只要函数名之前加上async关键字就表明该函数内部有异步操作。该异步操作应该返回一个promise对象前面用await关键字注明。当函数执行的时候一旦遇到await就会先返回等到触发的异步操作完成再接着执行函数体内后面的语句。
只要函数名之前加上async关键字就表明该函数内部有异步操作。该异步操作应该返回一个Promise对象前面用await关键字注明。当函数执行的时候一旦遇到await就会先返回等到触发的异步操作完成再接着执行函数体内后面的语句。
```javascript
async function getStockPrice(symbol, currency) {
let price = await getStockPrice(symbol);
return convert(price, currency);
}
```
上面代码是一个获取股票报价的函数函数前面的async关键字表明该函数将返回一个Promise对象。调用该函数时当遇到await关键字立即返回它后面的表达式getStockPrice函数产生的Promise对象不再执行函数体内后面的语句。等到getStockPrice完成再自动回到函数体内执行剩下的语句。
下面是一个更一般性的例子。
```javascript
@ -205,14 +218,8 @@ async function asyncValue(value) {
return value;
}
(async function() {
var value = await asyncValue(42);
assert.equal(42, value);
done();
})();
```
上面代码中asyncValue函数前面有async关键字表明函数体内有异步操作。执行的时候遇到await语句就会先返回等到timeout函数执行完毕再返回value。后面的匿名函数前也有async关键字表明该函数也需要暂停等到await后面的`asyncValue(42)`得到值以后,再执行后面的语句。
上面代码中asyncValue函数前面有async关键字表明函数体内有异步操作。执行的时候遇到await语句就会先返回等到timeout函数执行完毕再返回value。
async函数并不属于ES6而是被列入了ES7但是traceur编译器已经实现了这个功能。

View File

@ -41,6 +41,7 @@
- Jake Archibald, [JavaScript Promises: There and back again](http://www.html5rocks.com/en/tutorials/es6/promises/)
- Tilde, [rsvp.js](https://github.com/tildeio/rsvp.js)
- Sandeep Panda, [An Overview of JavaScript Promises](http://www.sitepoint.com/overview-javascript-promises/): ES6 Promise入门介绍
- Jafar Husain, [Async Generators](https://docs.google.com/file/d/0B4PVbLpUIdzoMDR5dWstRllXblU/view?sle=true): 对async与Generator混合使用的一些讨论
## 工具