繁体   English   中英

请求承诺:做承诺缓存结果

[英]Request-Promise: do promise cache the result

我正在使用请求承诺见下面的代码)。

问题:如果我缓存了一个承诺,它是缓存结果还是每次都问一个新的?

例子:

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. 实现时,承诺:
        • 不得过渡到任何其他状态。
        • 必须有一个不能改变的值

还是每次都问一个新的?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM