setTimeout不在异步代码中工作

时间:2014-09-09 10:41:51

标签: javascript angularjs asynchronous settimeout

以下是我的角度控制器代码 -

$scope.visibility = true;
$http.get("/api/getempl").then(function(response){
    if (response.status == 200) {
        $scope.empData = response.data.data;
        (function(){
            setTimeout(function(){
                $scope.visibility = false;
            }, 4000);
        })();
    }
});

我正在尝试显示加载图像,直到数据未被提取并在响应的基础上标记$scope.visibility -

.col-md-12(ng-show="visibility")
  h1 LOADING
.col-md-12(ng-show="!visibility")
  // DATA IN TABLE

现在LOADING文本始终可见,因为我希望一旦获取数据,在延迟显示表数据但它不起作用之后,让我知道我在这里做错了什么。

2 个答案:

答案 0 :(得分:2)

使用$ timeout

Angular的window.setTimeout包装器。 fn函数被包装到try / catch块中,并将任何异常委托给$ exceptionHandler服务。

$scope.visibility = true;
$http.get("/api/getempl").then(function(response){
    if (response.status == 200) {
        $scope.empData = response.data.data;

            $timeout(function(){
                $scope.visibility = false;
            }, 4000);

    }
});

答案 1 :(得分:1)

使用$timeout代替setTimeout

$scope.visibility = true;
$http.get("/api/getempl").then(function(response){
    if (response.status == 200) {
        $scope.empData = response.data.data;
        $timeout(function(){
            $scope.visibility = false;
        }, 4000);
    }
});

请参阅工作示例:jsFiddle example