나는 을 수행하는 AngularJS 응용 프로그램을 가지고 있는데, 주 사용자 프로필을 가져오고, 사용자 친구에 대한 참조를 포함하는 요청은 입니다. - 친구 프로필을 검색하기 위해 친구 당 하나의 요청이 있습니다.
친구의 프로필을 클릭하면이 프로필이 기본 프로필로로드됩니다.
저는 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 응답을 사용할 수있게되면 친구들이 UI에 추가됩니다.
문제는 changeCurrentProfileUri
함수를 여러 번 호출 할 수 있으며 현재 사용자의 친구를로드하라는 보류중인 요청이있는 동안에도 호출 할 수 있다는 것입니다.
내가 알고 싶은 것은 changeCurrentProfileUri
전화에서 여전히 대기중인 이전의 HTTP 요청을 취소 할 수 있습니까? 다른 사용자 프로필을로드하려고 시도하기 때문에 더 이상 필요하지 않기 때문입니다. 이러한 보류중인 요청은 더 이상 범위에 포함되지 않고 범위에 포함되지 않는 friendsPgArray
의 인스턴스를 채울 것이므로 쓸모가 없습니다.
자바 선물, 또는 RxScala 또는 RxJava 같은 프레임 워크를 사용하여, 나는 미래의 결과에 대한 해제 등록 관심에 허용 "취소"또는 "구독 취소"방법의 어떤 종류는 일반적으로 거기 보았다. Javascript로 그런 일을 할 수 있습니까? 그리고 AngularJS와?
안녕을 보여주는 여기에 0
입니다 fiddle에 동일 해집니다. 전역 요청 시간 제한을 설정하고 싶지 않지만 사용자 상호 작용을 기반으로 보류중인 요청을 취소 할 수 있기를 원합니다. 나는 시간 초과가 나를 위해 무엇을 할 수 있는지 안다. –
그건 글로벌 타임 아웃이 아닙니다 (최소한만이 아닙니다). 그것은 단지 필드 이름입니다 (별로 좋지 않습니다). 실제로 이것은 $ q 서비스에 의해 생성되고 사용자 인터 럽션에 기반하여 (요청을 취소하기 위해) 해결 될 수있는 약속입니다. –
@SebastienLorber가 당신을 위해 바이올린을 추가했습니다. –