我有一個AngularJS應用程序,它執行 -1請求獲取主要用戶配置文件,其中包含對用戶朋友的引用,然後每個朋友請求1個請求以檢索朋友配置文件。
當我們點擊一個朋友的個人資料時,我們加載這個個人資料作爲主要個人資料。
我在RDF /語義網絡世界,所以我不能以不同的方式模擬這些交互,這不是問題的關鍵。
這是我試圖構建的應用程序的早期版本,它可以幫助你瞭解什麼是我的問題:http://sebastien.lorber.free.fr/addressbook/app/
代碼如下:
$scope.currentProfileUri = 'http://bblfish.net/people/henry/card#me';
$scope.$watch('currentProfileUri', function() {
console.debug("Change current profile uri called with " + $scope.currentProfileUri);
loadFullProfile($scope.currentProfileUri);
})
// called when we click on a user's friend
$scope.changeCurrentProfileUri = function changeCurrentProfileUri(uri) {
$scope.currentProfileUri = uri;
}
function loadFullProfile(subject) {
$scope.personPg = undefined;
// we don't want to capture the scope variable in the closure because there may be concurrency issues is multiple calls to loadFullProfile are done
var friendsPgArray = [];
$scope.friendPgs = friendsPgArray;
fetchPerson(subject).then(function(personPg) {
$scope.personPg = personPg
fetchFriends(personPg,function onFriendFound(relationshipPg) {
friendsPgArray.push(relationshipPg);
});
},function(error) {
console.error("Can't retrieve full profile at "+uri+" because of: "+error);
});
}
所以朋友會在用戶界面中追加,當http響應在promise中可用時。
問題是功能changeCurrentProfileUri
可以被多次調用,並且可能會在仍有未決請求加載當前用戶的朋友時被調用。
我想知道的是,如果有可能在changeCurrentProfileUri
調用中取消以前的http請求仍然處於等待狀態?因爲我試圖加載另一個用戶配置文件,所以我不再需要它們了。 這些待處理的請求將填充friendsPgArray
的一個實例,該實例不在該範圍內,因此不會被放入範圍,因此它只是無用的。
使用Java期貨,或像RxScala或RxJava框架,我看到一般有某種「取消」或「取消訂閱」方法,它允許對未來結果取消註冊的興趣。是否有可能用Javascript做這樣的事情?和AngularJS?
嗨。我不想設置全局請求超時,但希望能夠取消基於用戶交互的未決請求。我沒有看到什麼可以超時爲我做。 –
這不是全局超時(至少不只是)。它只是字段的名稱(不是很好)。事實上 - 這是一個承諾,可以由$ q服務創建,並根據用戶的意圖解決(取消請求)。 –
@SebastienLorber爲你添加了小提琴。 –