gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 22:49:49 25 4
gpt4 key购买 nike

我正在查看 Koa.js/Node.js 应用程序,我认为我对生成器和 promise 有很好的理解。但我无法理解以下代码:

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。

但是 yield 本身并不能理解 promises,对吗?我还假设调用:

storakleShopifyApi.exchangeTemporaryToken(parameters);

返回:

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

那么 yield 如何处理这个问题并将 promise 的解析值分配给 accessToken 变量?

最佳答案

我从没想过超越 Google 搜索结果的第一页有任何值(value),但我想我在那里找到了问题的答案:

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

引用这篇文章:

“这就是 Koa 的工作方式——你的应用程序代码是生成器,它发出一系列 promise (或我将在下面展示的其他东西),Koa 等待每个 promise 完成,然后再恢复你的代码(传回给你是上一个任务的结果)。”

所以 Koa 是 yield 和 promises 之间的粘合剂。

关于javascript - yield 如何理解 Node.js/Koa.js 应用程序中的 Promises?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35509237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com