2016-02-19 12 views
5

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?

+1

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. –

Odpowiedz

2

nigdy nie myślałem, że będzie poza 1 stronie wyników wyszukiwania Google miał żadnej wartości, ale myślę, że znalazłem odpowiedź na moje pytanie tam:

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

cytując ten post:

"I tak działa Koa - twój kod aplikacji jest generatorem, emituje serię obietnic (lub innych rzeczy, które pokażę poniżej), a Koa czeka, aż każdy skończy, zanim ponownie podejmie twój kod (przekazując ci wynik poprzedniego zadania). "

Więc to Koa jest klejem między plonem a obietnicami.