2016-02-19 6 views
5

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?

+1

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

Antwort

2

Ich hätte nie gedacht, dass jeder Wert hatte jenseits der ersten Seite der Google-Suchergebnisse gehen, aber ich glaube, ich die Antwort auf meine Frage dort gefunden:

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

Zitiert aus diesem Beitrag:

"Und so funktioniert Koa - dein Anwendungscode ist der Generator, er gibt eine Reihe von Versprechen ab (oder andere Dinge, die ich unten zeigen werde), und Koa wartet darauf, dass jeder abgeschlossen ist, bevor er deinen Code wieder aufnimmt Ergebnis der vorherigen Aufgabe). "

So ist es Koa, der der Leim zwischen Ertrag und Versprechen ist.

Verwandte Themen