首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Node.js/Koa.js应用程序中产生理解承诺?

如何在Node.js/Koa.js应用程序中产生理解承诺?
EN

Stack Overflow用户
提问于 2016-02-19 23:45:27
回答 1查看 3.2K关注 0票数 5

我正在看一个Koa.js/Node.js应用程序,我想我对生成器和promises有很好的理解。但是我不能理解下面的代码:

代码语言:javascript
复制
function *parseAuthorization() {
    let parameters = this.query;
    let accessToken = yield storakleShopifyApi.exchangeTemporaryToken(parameters);

    if(accessToken) {
        return ...
    }
    return this.response.redirect("/home/");
};

exchangeTemporaryToken方法如下:

代码语言:javascript
复制
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操作),它在该行上阻塞:

代码语言:javascript
复制
let accessToken = yield storakleShopifyApi.exchangeTemporaryToken(parameters);

storakleShopifyApi.exchangeTemporaryToken是另一个生成器函数,有趣的是它返回一个Promise。

但是,让步本身并不能理解承诺,不是吗?我还假设对以下内容的调用:

代码语言:javascript
复制
storakleShopifyApi.exchangeTemporaryToken(parameters);

返回:

代码语言:javascript
复制
IteratorResult {value: Promise..., done: true}

那么yield如何处理这个问题,并将promise中的已解析值赋给accessToken变量呢?

EN

回答 1

Stack Overflow用户

发布于 2016-02-20 01:20:53

我从来没有想过超出谷歌搜索结果的第一页有任何价值,但我想我在那里找到了我的问题的答案:

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

引用这篇文章:

“Koa就是这样工作的--你的应用程序代码就是生成器,它会发出一系列的承诺(或者我将在下面展示的其他东西),Koa会等待每一个承诺的完成,然后才会恢复你的代码(将前一个任务的结果传递给你)。”

因此,Koa是产量和承诺之间的粘合剂。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35509237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档