2016-02-19 5 views
5

Я смотрю приложение 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} 

Так как же справиться с выходом этого и присваивает разрешенное значение от обещания переменного маркера доступа?

+1

Нет, доходность ничего не знает о том, что он дает, будь то обещание или что-то еще. Но потребитель урожая - это каркас koa, который ** знает, что полученное значение является обещанием, ждет его разрешения, затем передает полученное значение обратно генератору в следующий вызов 'next', что приводит к «значению» доходности и, следовательно, присвоено «accessToken». Такое поведение лежит в основе коа. –

ответ

2

Я никогда не думал, что выходит за рамки 1-й странице результатов поиска Google имел какое-либо значение, но я думаю, что я нашел ответ на мой вопрос там:

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

Цитирование с этого поста:

«И так работает Коа - ваш код приложения является генератором, он испускает ряд обещаний (или другие вещи, которые я покажу ниже), и Коа ждет завершения каждого из них, прежде чем возобновлять ваш код (передавая вам результат предыдущей задачи).

Таким образом, это коа, который является клеем между урожаем и обещаниями.