From 618a15005311103afd312549182be928e5e3be6d Mon Sep 17 00:00:00 2001 From: ruanyf Date: Sun, 16 Jul 2017 18:42:11 +0800 Subject: [PATCH] =?UTF-8?q?docs(async):=20add=20=E5=BC=82=E6=AD=A5=20Gener?= =?UTF-8?q?ator=20=E5=87=BD=E6=95=B0=E7=9A=84=E4=BE=8B=E5=AD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/async.md | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/docs/async.md b/docs/async.md index 778fabf..bdd7fda 100644 --- a/docs/async.md +++ b/docs/async.md @@ -795,7 +795,33 @@ genObj.next().then(x => console.log(x)); 上面代码中,`gen`是一个异步 Generator 函数,执行后返回一个异步 Iterator 对象。对该对象调用`next`方法,返回一个 Promise 对象。 -下面是另一个例子。 +异步遍历器的设计目的之一,就是 Generator 函数处理同步操作和异步操作时,能够使用同一套接口。 + +```javascript +// 同步 Generator 函数 +function* map(iterable, func) { + const iter = iterable[Symbol.iterator](); + while (true) { + const {value, done} = iter.next(); + if (done) break; + yield func(value); + } +} + +// 异步 Generator 函数 +async function* map(iterable, func) { + const iter = iterable[Symbol.asyncIterator](); + while (true) { + const {value, done} = await iter.next(); + if (done) break; + yield func(value); + } +} +``` + +上面代码中,可以看到有了异步遍历器以后,同步 Generator 函数和异步 Generator 函数的写法基本上是一致的。 + +下面是另一个异步 Generator 函数的例子。 ```javascript async function* readLines(path) {