Я смотрю приложение Koa.js/Node.js, и я думаю, что у меня хорошее понимание генераторов и обещаний. Но я не могу обернуть мою голову вокруг следующего кода:Как понимают результаты обещаний в приложении Node.js/Koa.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);
Returns:
IteratorResult {value: Promise..., done: true}
Так как же справиться с выходом этого и присваивает разрешенное значение от обещания переменного маркера доступа?
Нет, доходность ничего не знает о том, что он дает, будь то обещание или что-то еще. Но потребитель урожая - это каркас koa, который ** знает, что полученное значение является обещанием, ждет его разрешения, затем передает полученное значение обратно генератору в следующий вызов 'next', что приводит к «значению» доходности и, следовательно, присвоено «accessToken». Такое поведение лежит в основе коа. –