Request-Promise:承诺缓存结果

时间:2014-09-24 16:55:45

标签: javascript node.js promise

我正在使用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);
}

1 个答案:

答案 0 :(得分:4)

  

如果我缓存一个promise,请将其缓存结果

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

事实上,promise spec

  
      
    1.   
      1.   
      2. 满足后,承诺:   
            
        • 不得过渡到任何其他州。
        •   
        • 必须不得更改
        •   
      3.   
    2.   
  1.   

  

或每次问一个新的?

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