這裏曾經解決一諾千金:在賽車時
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