Request-Promise:承诺缓存结果
Posted
技术标签:
【中文标题】Request-Promise:承诺缓存结果【英文标题】:Request-Promise: do promise cache the result 【发布时间】: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);
【问题讨论】:
【参考方案1】:如果我缓存了一个承诺,它是否会缓存结果
一个承诺只能有一个结果(以防它没有被拒绝)。因此它也只能解决一次 - 此后不得更改其状态。
事实上,promise spec 状态
当实现时,一个承诺: 不得转换到任何其他状态。 必须有一个值,该值不得更改。
还是每次都问一个新的?
没有。 getTokenPromise()
是请求令牌的调用,它只执行一次。 cachedPromise
仅代表结果,而不是动作。即使您没有通过.then()
添加回调,该操作本身也会被执行。
【讨论】:
以上是关于Request-Promise:承诺缓存结果的主要内容,如果未能解决你的问题,请参考以下文章
NodeJS 和 Electron - 后端的请求承诺冻结前端的 CSS 动画