簡體   English   中英

yield如何理解Node.js / Koa.js應用程序中的Promise?

[英]How does yield understand Promises in a Node.js/Koa.js application?

我正在看一個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變量?

我從未想過超越Google搜索結果的第一頁有任何價值,但我想我在那里找到了我的問題的答案:

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

引用這篇文章:

“這就是Koa的工作原理 - 你的應用程序代碼是生成器,它會發出一系列的承諾(或者我將在下面展示的其他東西),Koa會在恢復你的代碼之前等待每一個都完成(把結果傳回給你)上一個任務)。“

因此,Koa是產量和承諾之間的粘合劑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM