0

有没有人在 AngularJS(v1.0.7)和 Chrome(版本 30.0.1599.114)中看到这个错误,其中取消 http GET 请求会使套接字进入挂起状态,从而最大化 chrome 中的线程池?

代码:

             if ($scope.canceler !== undefined) {
             $scope.canceler.resolve();
             $scope.canceler = undefined;
         }
         $scope.canceler = $q.defer();

         $http.get("/apicall", {
             cache: myCache,
             timeout: $scope.canceler.promise
         }).success(function (results) {

         }).
         error(function (result) {

         });

在此处输入图像描述

可能是相同的错误 241844

4

1 回答 1

3

您应该将 AngularJS 更新到 1.1.5 才能取消 http 调用。参考:在 AngularJS 中,如何在查询更改时停止正在进行的 $http 调用

这是工作代码和JS小提琴。我已经使用 AngularJS 1.2.0 和 Chrome 32.0.1700.0 canary 进行了测试。

function Ctrl($rootScope, $scope, $http, $q, $timeout) {
    var canceler = $q.defer();

    console.log("Calling...");
    $http.get("/echo/json", {
        //Will return data after 5 seconds passed
        data: {json: {id: "123"}, delay: 5},
        timeout: canceler.promise
    }).success(function (results) {
            console.log("Success");
            console.log(results);
        }).
        error(function (result) {
            console.log("Error");
            console.log(result);
        });

    $timeout(function () {
        console.log("1 second passed");
        // now, cancel it (before it may come back with data)
        $rootScope.$apply(function () {
            console.log("Canceling..");
            canceler.resolve();
        });
    }, 1000);
}

http://jsfiddle.net/7Ma7E/4/

请求变成了取消状态。

请求被取消

于 2013-11-14T05:16:21.900 回答