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

标签 javascript node.js generator koa

我正在查看 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/

相关文章:

javascript - Javascript 的链表数据结构

node.js - 如何配置 koa-router 在任何一组路由之前运行通用代码?

node.js - Node.js 和 Wordpress 的 Apache 代理位于相同的 "Domain"但不同的路径上

python - 两个 Python 生成器中的公共(public)项目

python - 生成器和序列之间的 Keras 区别

python - Tensorflow Dataset.from_generator 因 pyfunc 异常而失败

javascript - 使局部函数成为全局函数

javascript - 在 JavaScript if 条件中比较 jQuery(this)

javascript - 为什么有些 if 语句规则不起作用?

node.js - Postgres 尝试返回我的模型中不存在的列