在比赛时间内解决一次承诺

时间:2016-08-04 03:02:00

标签: javascript asynchronous promise es6-promise

这是一个承诺:

var getVersion = new Promise(function(resolve){ getVersionAsyn(resolve); }); 然后很多http请求依赖于'版本'并且请求在同一时间发送。

当页面初始化时,很多http请求将发送到服务器,请求取决于“版本”。

如何防止getVersion承诺多次运行?

好的。我自己投票了。这样一个愚蠢的问题。

2 个答案:

答案 0 :(得分:2)

  

如何防止getVersion承诺多次运行?

您已经缓存了承诺,因此版本的解析值因此getVersionAsyn()只被调用一次。您可以在promise上拥有尽可能多的.then()个处理程序,之后所做的只是从promise数据结构中获取已保存的已解析值。他们不会一遍又一遍地“执行”任何其他事情。

此代码的工作方式:

var getVersion = new Promise(function(resolve){
    getVersionAsyn(resolve);
});

getVersion是一个承诺,你已经存储了它。您可以拥有与此相同数量的呼叫者:

getVersion.then(function(version) {
    // access the version here
});

而且,getVersionAsyn()只会被召唤一次,这是第一次。从那时起,一旦promise得到解决,您将只访问已保存的已解析值(实际上是自动缓存)。实际上,使用promise进行缓存和异步检索值是一种很好的设计模式。

答案 1 :(得分:1)

getVersion的结果保存在后续承诺的执行上下文中......

getVersion.then(version => {
    var reqA = doHttp(version, "request A");
    var reqB = doHttp(version, "request B");
    var reqC = doHttp(version, "request C");
    return Promise.all([reqA, reqB, reqC]);
});