在赛跑时间内兑现一次承诺
Resolve a promise once in a racing time
这是一个承诺:
var getVersion = new Promise(function(resolve){
getVersionAsyn(resolve);
});
然后很多http请求依赖于那个'version'并且请求同时发送。
页面初始时,会向服务器发送大量http请求,请求依赖于'version'。
如何防止getVersion
多次承诺运行?
好的。我自己投反对票。真是个白痴问题。
将 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]);
});
How to prevent getVersion promise run multiple times?
您已经在缓存 promise 以及版本的已解析值,因此 getVersionAsyn()
只会被调用一次。您可以在承诺中拥有任意数量的 .then()
处理程序,所有后续的一次操作只是从承诺数据结构中获取保存的、已解析的值。他们不会一遍又一遍地 "execute" 任何其他事情。
此代码的工作方式:
var getVersion = new Promise(function(resolve){
getVersionAsyn(resolve);
});
getVersion
是一个承诺,您已经在存储它。您可以有尽可能多的来电者:
getVersion.then(function(version) {
// access the version here
});
而且,getVersionAsyn()
只会被调用一次,第一次。从那时起,一旦 promise 已解决,您将只访问保存的已解决值(本质上是一个自动缓存)。使用 promise 进行缓存和异步检索值实际上是一个很好的设计模式。
这是一个承诺:
var getVersion = new Promise(function(resolve){
getVersionAsyn(resolve);
});
然后很多http请求依赖于那个'version'并且请求同时发送。
页面初始时,会向服务器发送大量http请求,请求依赖于'version'。
如何防止getVersion
多次承诺运行?
好的。我自己投反对票。真是个白痴问题。
将 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]);
});
How to prevent getVersion promise run multiple times?
您已经在缓存 promise 以及版本的已解析值,因此 getVersionAsyn()
只会被调用一次。您可以在承诺中拥有任意数量的 .then()
处理程序,所有后续的一次操作只是从承诺数据结构中获取保存的、已解析的值。他们不会一遍又一遍地 "execute" 任何其他事情。
此代码的工作方式:
var getVersion = new Promise(function(resolve){
getVersionAsyn(resolve);
});
getVersion
是一个承诺,您已经在存储它。您可以有尽可能多的来电者:
getVersion.then(function(version) {
// access the version here
});
而且,getVersionAsyn()
只会被调用一次,第一次。从那时起,一旦 promise 已解决,您将只访问保存的已解决值(本质上是一个自动缓存)。使用 promise 进行缓存和异步检索值实际上是一个很好的设计模式。