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