这里曾经解决一诺千金:在赛车时
var getVersion = new Promise(function(resolve){ getVersionAsyn(resolve); });
那么很多HTTP请求取决于“版本”,并请求在同一时间发送。
当页面初始化时,很多http请求将发送到服务器,并且请求取决于'版本'。
如何防止getVersion
承诺多次运行?
好的。我投票自己。这样的白痴问题。
这里曾经解决一诺千金:在赛车时
var getVersion = new Promise(function(resolve){ getVersionAsyn(resolve); });
那么很多HTTP请求取决于“版本”,并请求在同一时间发送。
当页面初始化时,很多http请求将发送到服务器,并且请求取决于'版本'。
如何防止getVersion
承诺多次运行?
好的。我投票自己。这样的白痴问题。
如何防止getVersion答应多次运行?
您已经缓存了承诺,因此版本的解析值只能被调用一次。您可以根据承诺获得尽可能多的处理程序,而后续的所有操作只需从promise数据结构中提取保存的已分解值。他们不会一遍又一遍地“执行”其他任何事情。
此代码的工作方式:
var getVersion = new Promise(function(resolve){
getVersionAsyn(resolve);
});
getVersion
是一个承诺,你已经将它存储。当你这样做,你可以有许多来电者:
getVersion.then(function(version) {
// access the version here
});
而且,getVersionAsyn()
将只被称为只有一次,第一次。从那时起,一旦承诺解决了,您将只需访问保存的解析值(本质上是一个自动缓存)。它实际上是一个很好的设计模式,它使用promise来缓存和异步检索值。
'getVersion。然后(函数(版本){ //在这里访问版本 });''将'版本'可以在'.then()'''''''getVersion''返回''''''''另外,'resolve'似乎确实被调用? – guest271314
@ guest271314 - 对不起,但我不明白那个评论。 'getVersion'是一个承诺。使用'.then()'将会返回无论您调用一次还是一次100次都能解决的承诺值。承诺永远不会改变他们解决的价值。 – jfriend00
在Answer处调用javascript的'resolve'吗?或作为参考传递给'getVersionAsyn'?请注意,问题中的要求不明确,在这里。 – guest271314
保持在随后的承诺的执行上下文的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]);
});
_“然后很多http请求依赖于'版本'并且请求在同一时间发送'_什么是'getVersionAsyn'的文本?哪个函数会产生多个HTTP请求? – guest271314
将'resolve'传递给'getVersionAsyn'函数的目的是什么? – guest271314
_“如何防止'getVersion'承诺多次运行?”_为什么'getVersion'被多次调用?不确定预期的结果是什么?防止发生多个请求?或者防止函数被递归调用?尽管在问题中没有出现递归? – guest271314