2014-09-24 130 views
3

我正在使用Request-Promise请参阅下面的代码)。请求 - 承诺:确保缓存结果

问题:如果我缓存一个承诺,是否缓存结果或每次要求一个新的?

例子:

var cachedPromise = getTokenPromise(); 
cachedPromise.then(function(authorizationToken1) { 
    //... 
}); 
cachedPromise.then(function(authorizationToken2) { 
    //... 
}); 
//QUESTION: Is right that authorizationToken1 equals authorizationToken2 

getTokenPromise()函数:

var querystring = require('querystring'); 
var rp = require('request-promise'); 

/** 
* Returns an authorization token promise 
*/ 
function getTokenPromise() { 
    var requestOpts = { 
     encoding: 'utf8', 
     uri: 'https://datamarket.accesscontrol.windows.net/v2/OAuth2-13', 
     method: 'POST', 
     body: querystring.stringify({ 
      'client_id': 'Subtitles', 
      'client_secret': 'Xv.............................s=', 
      'scope': 'http://api.microsofttranslator.com', 
      'grant_type': 'client_credentials' 
     }) 
    }; 
    return rp(requestOpts); 
} 

回答

4

如果我缓存承诺,做到这一点缓存结果

一个承诺只能有一个结果(如果它没有被拒绝)。因此它也只能解决一次 - 而且不能在此后改变它的状态。

事实上,promise spec状态

    1. 当满足,一个承诺:
      • 不得过渡到任何其他国家。
      • 必须有,其中一定不能更改
  • 或每次问一个新的?

    getTokenPromise()是要求令牌的调用,它只执行一次。 cachedPromise只有代表结果,而不是一个动作。即使您未通过.then()添加回调,该操作本身也会执行。