我用AngularJS和Elasticsearch构建了一个小的搜索应用程序(电影)。在测试的过程中,我意识到当事情比计划的时间更长时,我忘记了添加一个超时,但我在让它工作时遇到了问题。实际上,我决定使用$interval而不是$timeout,因为它看起来更好,因为它仍然在工作以获得结果,而不是在花费更长时间时停止进程。
下面是我的代码:
vm.search = function() {
vm.currentPage = 1;
vm.results.documents = [];
vm.isSearching = true;
$state.go('search');
return searchService.search(vm.searchTerms, vm.currentPage).then(function(es_return) {
var totalItems = es_return.hits.total;
var totalTime = es_return.took;
var numPages = Math.ceil(es_return.hits.total / vm.itemsPerPage);
vm.results.pagination = [];
for (var i = 1; i <= 100; i++) {
vm.results.totalItems = totalItems;
vm.results.queryTime = totalTime;
vm.results.pagination = searchService.formatResults(es_return.hits.hits);//load all results
vm.results.documents = vm.results.pagination.slice(vm.currentPage, vm.itemsPerPage);
}
vm.noResults = true;
}
),
function(error){
console.log('ERROR: ', error.message);
vm.isSearching = false;
}
};我在想我该把它放在哪里
if(totalItems > 0) {
$interval(function(){
vm.isSearching = true;
}, 2000);在那里面。
我试着把它放在for循环中,但没有找到joy :(
发布于 2016-10-14 05:07:01
您可以进一步链接promise,并从$q (TypeScript:$q:IQService)生成一个延迟,在一段时间后拒绝它,并显示拒绝消息。
var defer = $q.defer();
并在某处返回defer.promise
SearchService.$inject = ["$q", "$http"]
function SearchService($q, $http) {
var defaultWaitUntilTimeout = 2000;
this.search = function (param, param2, waitUntilTimeout) {
var defer = $q.defer();
$http().get().then(function (result) { defer.resolve(result);})
$timeout(function () { defer.reject();}, waitUntilTimeout || defaultWaitUntilTimeout); // now the rejection function of the promise will get called
return defer.promise;
}
}我希望你明白我的意思
https://stackoverflow.com/questions/40030685
复制相似问题