9

I am using $http.post to get the data from node.js server. I want to handle the delay.

I had added timeout as $http.defaults.timeout = 100; and expected to console.log the delay in error but it is not working.

Example:

$http.defaults.timeout = 100;
$http.post(url, data).success(function(result) {
    callback(result);
}).error(function(error) {
    console.log("error");
});

I am new to AngularJS. Any help will be grateful.

4

3 回答 3

4

$timeout回报承诺。$http.post回报承诺也是如此。

所以我会使用$q.all. 文件

参考

$q.all([promise, …])newPromise newPromise将在所有给定的承诺都解决后解决。

我们可以创建一些工厂(或者如果你想改变它,可以使用提供者):

.factory('delay', ['$q', '$timeout',
    function($q, $timeout) {
        return {
            start: function() {
                var deferred = $q.defer();
                $timeout(deferred.resolve, 100);
                return deferred.promise;
            }
        };
    }
]); 

现在在控制器中我们可以编写如下内容:

$q.all([delay.start(), $http.post(url, data)]).then(
    function(results) {
        // .....
    }, function(error) {
        // ....
    });

因此,只有在超时停止时才会得到响应,无论我们得到响应的速度有多快$http.post

于 2013-11-07T11:31:51.897 回答
2

AngularJS $http 接受超时作为请求参数之一(更多在这里

请查看这篇解释如何实现超时功能的帖子:

$http.post(url, { timeout: 100 })
        .success(success)
        .error(error);

成功和错误函数接受几个参数:function(data, status, headers, config). 当您收到超时错误时,将执行错误处理程序,其状态将为0.

我希望这会有所帮助。

于 2013-11-07T10:55:24.397 回答
0

检查这个:

angular.module('MyApp', [])
  .config(['$httpProvider', function($httpProvider) {
    $httpProvider.defaults.timeout = 5000;
}]);
于 2016-06-08T17:59:58.283 回答