javascript - 请求 promise : do promise cache the result

标签 javascript node.js promise

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

最佳答案

If I cache a promise, do it cache the result

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

事实上,promise spec

      1. When fulfilled, a promise:
        • must not transition to any other state.
        • must have a value, which must not change.

or each time ask a new one?

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

关于javascript - 请求 promise : do promise cache the result,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26022458/

相关文章:

node.js - 如何在创建新表之前更新表中的所有行?

javascript - 从前端 fetch() 请求调用时,Express res.redirect() 不重定向浏览器 URL

javascript - 如何兑现 promise ?

javascript - 如何使用下划线从对象内的数组中删除空、空、未定义的值

javascript - 如何证明高级 PDF(HTML) 中的阿拉伯文本?

javascript - Nodejs API 与 JavaScript Web API 接口(interface)

javascript - 如何将现有回调 API 转换为 Promise?

javascript - 我如何模拟 AngularJS 单元测试中 promise 的结果?

javascript - iScroll 不断向上滚动(Phonegap)

javascript - 使用 WebRTC 在浏览器之间传输 JSON