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是产量和承诺之间的粘合剂。