如何使用angularjs模拟长任务?

如何使用angularjs模拟长任务?,angularjs,Angularjs,我对AngularJS是新手。我正在测试resolve,以便仅在收到服务器的响应后显示部分视图(这是一种好方法吗?) 为了更好地理解resolve的工作原理,我想在服务中添加一个暂停(5秒),该服务使用$resource获取部分视图显示的数据。在Java中,我将使用sleep方法。在执行以下代码行之前(在我的服务中使用$resource之前),是否有一种简单的方法可以使用AngularJS等待5秒钟?类似的方法将等待: function ExampleController($scope, $ti

我对AngularJS是新手。我正在测试resolve,以便仅在收到服务器的响应后显示部分视图(这是一种好方法吗?)


为了更好地理解resolve的工作原理,我想在服务中添加一个暂停(5秒),该服务使用$resource获取部分视图显示的数据。在Java中,我将使用sleep方法。在执行以下代码行之前(在我的服务中使用$resource之前),是否有一种简单的方法可以使用AngularJS等待5秒钟?

类似的方法将等待:

function ExampleController($scope, $timeout, $q) {

    function get() {

        var request = $q.defer();

        console.log('Waiting...');

        $timeout(function() {
            request.resolve({data:1});
        }, 5000);

        return request.promise;
    }

    get().then(function(response) {
        console.log(response.data);
    });
}

基本上,您可以设置一个
$q.defer()
,然后在加载所需的所有内容时(或者在本例中,当超时结束时)解析它。然后使用
then
功能对解析的数据进行处理。

创建如下工厂:

function fakeResource($q, $timeout) {
    return {
        get: function() {

            var request = $q.defer();

            $timeout(function() {
                request.resolve({data:1});
            }, 5000);

            return request.promise;
        }
    }
}]);

app.factory('fakeResource', fakeResource);
然后在$routeProvider的解决方案中:

customers: function(fakeResource) {
    return fakeResource.get();
}

使用
$timeout(function(){},5000)
,但这不会阻塞!Javascript。您不应该期望
$resource
阻止它们是的,我看到$timeout,但正如您所说,它不会延迟以下代码行的执行,我必须创建两个函数来延迟$resource的使用。我想知道是否存在一个像Java这样的简单解决方案。Javascript(就本问题而言)是一个单线程执行环境。如果延迟执行,将冻结浏览器。你不希望这样(除了极少数情况外,它还有不可能实现的额外好处)。您需要了解异步模型-
$timeout
将帮助您模拟它。对不起,我的问题不清楚。我想在$routeProvider的when中使用属性resolve:$routeProvider.when“/list”,controller:“…”,resolve:{customers:function(customerResource)return customerResource.query();}customerResource是我使用$resource的服务。啊,抱歉,我已经包括了另一个答案,我认为这更符合您的要求