这是一个承诺:
var getVersion = new Promise(function(resolve){
getVersionAsyn(resolve);
});
然后很多http请求依赖于'版本'并且请求在同一时间发送。
当页面初始化时,很多http请求将发送到服务器,请求取决于“版本”。
如何防止getVersion
承诺多次运行?
好的。我自己投票了。这样一个愚蠢的问题。
答案 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]);
});