gpt4 book ai didi

javascript - Angular $http服务,如何取消/取消订阅挂起的请求?

转载 作者:行者123 更新时间:2023-11-29 19:44:14 25 4
gpt4 key购买 nike

我有一个 AngularJS 应用程序执行- 1 个获取主要用户配置文件的请求,其中包含对用户 friend 的引用,- 然后每个 friend 1 个请求以检索 friend 资料。

当我们点击 friend 的个人资料时,我们会加载此个人资料作为主要个人资料。

我在 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);
});
}

因此,当 promise 中的 http 响应可用时, friend 会在出现时附加到 UI。

问题是 changeCurrentProfileUri 函数可以被多次调用,并且有可能在仍有未决请求加载当前用户的好友时被调用。

我想知道的是,是否有可能在 changeCurrentProfileUri 调用中取消之前仍未决的 http 请求?因为我不再需要它们,因为我正在尝试加载另一个用户配置文件。这些挂起的请求将填充一个 friendsPgArray 的实例,它不再在范围内,也不会被放入范围内,所以它只是无用的。


使用 Java Futures,或像 RxScala 或 RxJava 这样的框架,我看到通常有某种“取消”或“取消订阅”的方法允许取消注册对 future 结果的兴趣。有可能用 Javascript 做这样的事情吗?和 AngularJS?

最佳答案

是的,是的!请参阅 this section Angular $http 服务文档。注意配置对象中的 timeout 字段。我认为,它正是您所需要的。您可以解决此问题,然后请求将被标记为已取消,并调用错误处理程序。在错误处理程序中,您可以通过 http 状态代码过滤掉这种情况 - 它将等于 0。

这里是 fiddle证明这一点

关于javascript - Angular $http服务,如何取消/取消订阅挂起的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20969575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com