我正在看一个Koa.js/Node.js应用程序,我想我对生成器和promises有很好的理解。但是我不能理解下面的代码:
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变量呢?
发布于 2016-02-20 01:20:53
我从来没有想过超出谷歌搜索结果的第一页有任何价值,但我想我在那里找到了我的问题的答案:
http://blog.stevensanderson.com/2013/12/21/experiments-with-koa-and-javascript-generators/
引用这篇文章:
“Koa就是这样工作的--你的应用程序代码就是生成器,它会发出一系列的承诺(或者我将在下面展示的其他东西),Koa会等待每一个承诺的完成,然后才会恢复你的代码(将前一个任务的结果传递给你)。”
因此,Koa是产量和承诺之间的粘合剂。
https://stackoverflow.com/questions/35509237
复制相似问题