yield如何理解Node.js / Koa.js应用程序中的Promise?

我正在查看一个Koa.js / Node.js应用程序,我想我对生成器和许诺有很好的理解。 但是我无法围绕下面的代码:

function *parseAuthorization() { let parameters = this.query; let accessToken = yield storakleShopifyApi.exchangeTemporaryToken(parameters); if(accessToken) { return ... } return this.response.redirect("/home/"); }; 

exchangeTemporaryToken方法如下:

 function* exchangeTemporaryToken(query) { let authApi = getAuthApi(query.shop); return new Promise(function (resolve, reject) { authApi.exchange_temporary_token(query, function (err, data) { if (err) { return reject(err); } return resolve(data['access_token']); }); }); }; 

* parseAuthorization显然是一个生成器函数(在这种情况下是一个API操作),它阻塞了这一行:

 let accessToken = yield storakleShopifyApi.exchangeTemporaryToken(parameters); 

storakleShopifyApi.exchangeTemporaryToken是另一个生成器函数,有趣的是足以返回一个Promise。

但是屈服本身并不了解承诺,是吗? 我还假设,呼吁:

 storakleShopifyApi.exchangeTemporaryToken(parameters); 

返回:

 IteratorResult {value: Promise..., done: true} 

那么yield如何处理这个问题,并将parsing后的值从promise传递给accessTokenvariables?

我从来没有想过,超越谷歌search结果的第一页有什么价值,但我想我在那里find了我的问题的答案:

http://blog.stevensanderson.com/2013/12/21/experiments-with-koa-and-javascript-generators/

从这个post引用:

“这就是Koa的工作原理 – 你的应用程序代码是生成器,它发出了一系列的承诺(或者我将在下面展示的其他东西),Koa等待每一个完成之后恢复你的代码(传递给你的结果以前的任务)“。

因此,Koa是产量和承诺之间的粘合剂。