Ich schaue mir eine Anwendung von Koa.js/Node.js an und denke, dass ich ein gutes Verständnis von Generatoren und Versprechungen habe. Aber ich kann nicht meinen Kopf wickeln um den folgenden Code:Wie versteht man unter Versprechungen in einer Node.js/Koa.js-Anwendung?
function *parseAuthorization() {
let parameters = this.query;
let accessToken = yield storakleShopifyApi.exchangeTemporaryToken(parameters);
if(accessToken) {
return ...
}
return this.response.redirect("/home/");
};
Die exchangeTemporaryToken Methode ist wie folgt:
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 ist offensichtlich eine Generatorfunktion (eine API-Aktion in diesem Fall), die Blöcke auf diese Linie:
let accessToken = yield storakleShopifyApi.exchangeTemporaryToken(parameters);
die storakleShopifyApi.exchangeTemporaryToken ist eine andere Generatorfunktion, die interessanterweise ein Versprechen zurückkehrt.
Aber Ertrag an sich versteht Versprechen nicht, oder? Ich gehe davon aus, dass der Anruf an:
storakleShopifyApi.exchangeTemporaryToken(parameters);
Returns:
IteratorResult {value: Promise..., done: true}
Wie Ausbeute dies umgehen kann und ordnet den aufgelösten Wert von dem Versprechen an der accessToken Variable?
Nein, der Ertrag weiß nichts darüber, was er erbringt, ob ein Versprechen oder irgendetwas anderes. Aber der Verbraucher des Ertrags ist das Koa-Framework, das ** weiß **, dass der erhaltene Wert ein Versprechen ist, darauf wartet, dass es auflöst, und dann den resultierenden Wert beim nächsten Aufruf an "next" an den Generator zurückgibt, Dies hat den Effekt, dass es zum "Wert" des Ertrags wird und somit "accessToken" zugewiesen wird. Dieses Verhalten ist das Herzstück von Koa. –