ユーザーの友人への参照を含むメインのユーザー プロファイルを取得するための 1 つの要求と、友人ごとに 1 つの要求を実行して友人のプロファイルを取得する AngularJS アプリケーションがあります。
友人のプロフィールをクリックすると、このプロフィールがメイン プロフィールとして読み込まれます。
私はRDF /セマンティックWebの世界にいるので、これらの相互作用を別の方法でモデル化することはできません.これは問題のポイントではありません.
これは私が構築しようとしているアプリケーションの初期バージョンであり、私の問題を理解するのに役立ちます: 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);
});
}
そのため、promise で http 応答が利用可能になると、友人が来ると UI に追加されます。
問題は、関数changeCurrentProfileUri
が複数回呼び出される可能性があり、現在のユーザーの友達をロードするための保留中の要求がまだある間に呼び出される可能性があることです。
私が知りたいのは、changeCurrentProfileUri
保留中の以前の http 要求を電話でキャンセルできるかどうかです。別のユーザー プロファイルを読み込もうとしているからです。これらの保留中のリクエストはfriendsPgArray
、スコープ内にないインスタンスを満たし、スコープ内に配置されないため、役に立たないだけです。
Java Futures、または RxScala や RxJava などのフレームワークを使用して、一般に、将来の結果に対する関心の登録を解除できる何らかの「キャンセル」または「登録解除」メソッドがあることを確認しました。Javascriptでそのようなことを行うことは可能ですか? そしてAngularJSで?