Patrzę na aplikację Koa.js/Node.js i myślę, że dobrze rozumiem generatory i obietnice. Ale nie mogę owinąć głowę wokół następującego kodu:W jaki sposób wydajność rozumie obietnice w aplikacji Node.js/Koa.js?
function *parseAuthorization() {
let parameters = this.query;
let accessToken = yield storakleShopifyApi.exchangeTemporaryToken(parameters);
if(accessToken) {
return ...
}
return this.response.redirect("/home/");
};
Sposób exchangeTemporaryToken jest następujący:
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 jest oczywiście funkcją generatora (działanie API w tym przypadku), która blokuje na ta linia:
let accessToken = yield storakleShopifyApi.exchangeTemporaryToken(parameters);
storakleShopifyApi.exchangeTemporaryToken to kolejna funkcja generator, który co ciekawe zwraca obietnicę.
Ale wydajność przez sam nie rozumie obietnic, prawda? Jestem również przy założeniu, że wywołanie:
storakleShopifyApi.exchangeTemporaryToken(parameters);
Powroty:
IteratorResult {value: Promise..., done: true}
Więc w jaki sposób sobie z tym poradzić i wydajność przypisuje rozwiązany wartość z obietnicy danej zmiennej accessToken?
Nie, wydajność nie jest coś o co przynosi wiedzieć, czy obietnicy lub cokolwiek innego. Ale konsumentem wydajności jest struktura koa, która ** nie wie, że uzyskana wartość jest obietnicą, czeka na rozwiązanie, a następnie przekazuje uzyskaną wartość z powrotem do generatora w następnym wywołaniu "następnego", co powoduje, że jest to "wartość" plonu i tym samym przypisana do "accessToken". To zachowanie jest w sercu koa. –