我正在查看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如何处理这个并将promise中的已解析值分配给accessToken变量?
答案 0 :(得分:2)
我从未想过超越Google搜索结果的第一页有任何价值,但我想我在那里找到了我的问题的答案:
http://blog.stevensanderson.com/2013/12/21/experiments-with-koa-and-javascript-generators/
引用这篇文章:
“这就是Koa的工作方式 - 您的应用程序代码是生成器,它会发出一系列的承诺(或我将在下面显示的其他内容),Koa会在恢复代码之前等待每个代码完成(返回到你是上一个任务的结果。“
因此,Koa是产量和承诺之间的粘合剂。