【问题标题】:Request-Promise: do promise cache the resultRequest-Promise:承诺缓存结果
【发布时间】:2020-07-13 04:06:48
【问题描述】:

我正在使用Request-Promise参见下面的代码)。

问题: 如果我缓存了一个 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);
}

【问题讨论】:

    标签: javascript node.js promise


    【解决方案1】:

    如果我缓存了一个承诺,它是否会缓存结果

    一个承诺只能有一个结果(以防它没有被拒绝)。因此它也只能解决一次 - 此后不得更改其状态。

    事实上,promise spec 状态

        1. 当实现时,一个承诺:
          • 不得转换到任何其他状态。
          • 必须有一个值,该值不得更改

    还是每次都问一个新的?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-05
      • 1970-01-01
      • 2019-10-10
      • 2016-02-12
      • 1970-01-01
      • 2017-10-18
      • 2014-11-20
      相关资源
      最近更新 更多