1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-27 12:22:21 +00:00

edit promise

This commit is contained in:
Ruan Yifeng 2015-03-30 10:34:59 +08:00
parent 97b5d89f3b
commit b664561c13

View File

@ -450,23 +450,32 @@ async函数与Promise、Generator函数一样是用来取代回调函数、
```javascript
async function getStockPrice(symbol, currency) {
let price = await getStockPrice(symbol);
return convert(price, currency);
async function getStockPriceByName(name) {
var symbol = await getStockSymbol(name);
var stockPrice = await getStockPrice(symbol);
return stockPrice;
}
getStockPrice("JNJ")
.then(
price => console.log(price),
error => console.error(error)
);
```
上面代码是一个获取股票报价的函数函数前面的async关键字表明该函数将返回一个Promise对象。调用该函数时当遇到await关键字立即返回它后面的表达式getStockPrice函数产生的Promise对象不再执行函数体内后面的语句。等到getStockPrice完成,再自动回到函数体内,执行剩下的语句。
上面代码是一个获取股票报价的函数函数前面的async关键字表明该函数内部有异步操作。调用该函数时当遇到await关键字立即返回它后面的表达式getStockSymbol函数产生的Promise对象不再执行函数体内后面的语句。等到getStockSymbol完成再自动回到函数体内执行剩下的语句。
仔细观察getStockPrice函数你会发现除了添加async、await这两个命令整个代码与同步操作的流程一模一样。这就是async函数的本意尽可能地用同步的流程表达异步操作。
实际上上面的例子可以用Generator函数表达。
```javascript
function getStockPriceByName(name) {
return async(function*(name) {
var symbol = yield getStockSymbol(name);
var stockPrice = yield getStockPrice(symbol);
return stockPrice;
});
}
```
上面的例子中async函数是一个自动任务运行器需要自己定义它的参数是一个Generator函数。async函数的具体实现后文有例子这里只要知道async...await结构本质上是在语言层面提供的一种多个异步任务的自动运行器。
下面是一个更一般性的例子。
```javascript