Sto guardando un'applicazione Koa.js/Node.js e penso di avere una buona conoscenza dei generatori e delle promesse. Ma non posso avvolgere la testa intorno il seguente codice:In che modo yield capisce Promises in un'applicazione Node.js/Koa.js?
function *parseAuthorization() {
let parameters = this.query;
let accessToken = yield storakleShopifyApi.exchangeTemporaryToken(parameters);
if(accessToken) {
return ...
}
return this.response.redirect("/home/");
};
Procedimento exchangeTemporaryToken è il seguente:
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 è ovviamente funzione generatore (un'azione API in questo caso) che blocca su questa linea:
let accessToken = yield storakleShopifyApi.exchangeTemporaryToken(parameters);
lo storakleShopifyApi.exchangeTemporaryToken è un'altra funzione del generatore che restituisce abbastanza interessante una promessa.
Ma la resa di per sé non comprende le promesse, vero? Sono anche supponendo che la chiamata a:
storakleShopifyApi.exchangeTemporaryToken(parameters);
Returns:
IteratorResult {value: Promise..., done: true}
Così come resa gestire questo e assegna il valore risolto dalla promessa alla variabile access token?
No, la resa non sa nulla di ciò che sta producendo, sia una promessa o qualsiasi altra cosa. Ma il consumatore del rendimento è il framework koa, che ** fa ** sa che il valore ottenuto è una promessa, aspetta che si risolva, quindi passa il valore risultante al generatore nella prossima chiamata a 'next', che ha l'effetto di renderlo il "valore" del rendimento e quindi assegnato a 'accessToken'. Questo comportamento è al centro del koa. –