0

嗨在頁面上有4條指令,所有指令都需要用戶列表。 用戶列表存儲在需要hhtp請求的數據庫中。 因爲4條指令同時在頁面上,所以4個不同的ajax調用已經發送到服務器以獲得類似的響應。如何處理調用相同函數的多個Ajax調用?

然後響應得到緩存。

可以做什麼,所有4指示接收其用戶列表,只有一個AJAX發送到服務器。

裏面的代碼指令(自本)(ajaxCallService是服務)

ajaxCallService.getUser(function(response) { 
       self.users = response; 
       //Next operations 
}); 

ajaxCallService服務

Variable 
var userList = [] 

Method 
if (!userList.length) { 
      $http.post({ 
       url: #, 
       data:# 
      }) 
      .then(
       function(response) { 
         userList = response.allMembers; 
         callback && callback(userList); 
       } 
      ); 
     }else{ 
      callback && callback(userList); 
     } 

如何防止4個Ajax調用,只進行1個電話,讓其他3個等待迴應並傳遞迴應?

+0

使用角度承諾。 –

+0

在前一個回調中調用每個ajax函數。 –

回答

2

您可以使用promises來查看它是否已經在運行。由於服務是單向的,所以您知道它始終是共享實例:

var userList = []; 
var promise; 

function getUser() { 
    // inject the $q service 
    var deferred = $q.defer(); 

    if (userList.length) { 
     // already got data, immediately resolve that one 
     deferred.resolve(userList); 
    } 

    if (promise) { 
     // a promise is already working on it, return this one 
     return promise; 
    } else { 
     $http.post(...).success(function(response) { 
      userList = response; 
      deferred.resolve(response); 
     }); 
    } 

    // if this point is reached, this is the first call 
    // assign the promise so other calls can know this one is working on it 
    promise = deferred.promise; 
    return promise; 
} 
相關問題