2016-02-19 6 views
5

मैं कोआ.जेएस/नोड.जेएस एप्लिकेशन देख रहा हूं और मुझे लगता है कि मुझे जनरेटर और वादे की अच्छी समझ है। लेकिन मैं निम्नलिखित कोड के आसपास मेरे सिर लपेटो नहीं कर सकते हैं:उपज 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 एक और जनरेटर समारोह जो काफी दिलचस्प है एक वादा देता है।

लेकिन स्वयं द्वारा उपज वादे को समझ में नहीं आता है, है ना? मैं भी यह सोचते हैं कि करने के लिए कॉल:

storakleShopifyApi.exchangeTemporaryToken(parameters); 

रिटर्न:

IteratorResult {value: Promise..., done: true} 

तो उपज इस संभालने के लिए और accessToken चर करने के लिए वादा से हल हो गई मान नियत करता है?

+1

नहीं, उपज जो कुछ भी पैदा कर रही है, चाहे वह कोई वादा हो या कुछ और नहीं हो। लेकिन उपज का उपभोक्ता कोआ ढांचा है, जो ** ** जानता है कि उपज मूल्य एक वादा है, इसे हल करने की प्रतीक्षा करता है, फिर परिणामी मूल्य को अगली कॉल में जनरेटर को 'अगली' में वापस भेजता है, जिसने इसे उपज का "मूल्य" बनाने का प्रभाव दिया है और इस प्रकार 'एक्सेस टोकन' को असाइन किया गया है। यह व्यवहार कोआ के दिल में है। –

उत्तर

2

मैंने कभी नहीं सोचा कि Google खोज परिणामों के 1 पृष्ठ से परे जा रहा है किसी भी मूल्य था, लेकिन मुझे लगता है मैं वहाँ अपने प्रश्न का उत्तर मिल गया लगता है: इस पोस्ट से हवाला देते हुए

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

:

"और इस तरह कोआ काम करता है - आपका एप्लिकेशन कोड जनरेटर है, यह वादे की एक श्रृंखला (या अन्य चीजें जो मैं नीचे दिखाऊंगा) उत्सर्जित करता हूं, और कोआ आपके कोड को फिर से शुरू करने से पहले प्रत्येक को पूरा करने की प्रतीक्षा करता है (आपको वापस भेजना पिछले कार्य का नतीजा)। "

तो यह कोआ है जो उपज और वादे के बीच गोंद है।

संबंधित मुद्दे