在javascript承诺中放置http get调用的位置
我正在使用Elasticsearch和AngularJS构建一个小型搜索应用程序。我正在尝试使用Angular UI引导程序Typeahead来实现一个自动完成功能,它使用http.get调用来获得异步结果,但我不确定将它放在哪里?。。。。仍在学习音阶和角度 我将把这个http.get调用放在这个js承诺代码中的什么地方 http.get代码:在javascript承诺中放置http get调用的位置,javascript,angularjs,angular-ui-typeahead,Javascript,Angularjs,Angular Ui Typeahead,我正在使用Elasticsearch和AngularJS构建一个小型搜索应用程序。我正在尝试使用Angular UI引导程序Typeahead来实现一个自动完成功能,它使用http.get调用来获得异步结果,但我不确定将它放在哪里?。。。。仍在学习音阶和角度 我将把这个http.get调用放在这个js承诺代码中的什么地方 http.get代码: return $http.get('localhost:9200/bigtestindex/doc/_search', { params:
return $http.get('localhost:9200/bigtestindex/doc/_search', {
params: {
"query": {
"match": {
"content.autocomplete": {
"query": query,
"default_operator": "and"
}
}
}
}
}),
Javascript承诺代码:
this.getSuggestions = function(query) {
var deferred = $q.defer();
var terms = query.split(' '),
baseTerms = terms.length === 1 ? '' : terms.slice(0, -1).join(' ') + ' ',
lastTerm = terms[terms.length - 1].toLowerCase();
esClient.search({
index: 'bigtestindex',
body: {
"query": {
"simple_query_string": {
"fields": ['title'],
"query": baseTerms + '(' + lastTerm + '|' + lastTerm + '*)',
"default_operator": "and"
}
},
"suggest": {
"text": query,
"phraseSuggestion": {
"phrase": {
"field": "title",
"direct_generator": [{
"field": "title",
"suggest_mode": "popular",
"min_word_length": 3,
"prefix_length": 2
}]
}
}
},
"size": 5,
"_source": ["content"]
}
}).then(function(es_return) {
deferred.resolve(es_return);
}, function(error) {
deferred.reject(error);
});
return deferred.promise;
};
我很确定在身体的某个地方,只是不确定在哪里。。。我无法让它工作。我想,您的控制器代码可能如下所示:
function searchController(esClient)
{
var ctl = this;
ctl.suggestions = [];
this.getSuggestions = function(query) {
var terms = query.split(' '),
baseTerms = terms.length === 1 ? '' : terms.slice(0, -1).join(' ') + ' ',
lastTerm = terms[terms.length - 1].toLowerCase();
esClient.search({
index: 'bigtestindex',
body: {
"query": {
"simple_query_string": {
"fields": ['title'],
"query": baseTerms + '(' + lastTerm + '|' + lastTerm + '*)',
"default_operator": "and"
}
},
"suggest": {
"text": query,
"phraseSuggestion": {
"phrase": {
"field": "title",
"direct_generator": [{
"field": "title",
"suggest_mode": "popular",
"min_word_length": 3,
"prefix_length": 2
}]
}
}
},
"size": 5,
"_source": ["content"]
}
}, function(err, es_return) {
if(err) {
//Handle error or do nothing
return;
}
ctl.suggestions = es_return;
});
};
}
我想,您的控制器代码可能如下所示:
function searchController(esClient)
{
var ctl = this;
ctl.suggestions = [];
this.getSuggestions = function(query) {
var terms = query.split(' '),
baseTerms = terms.length === 1 ? '' : terms.slice(0, -1).join(' ') + ' ',
lastTerm = terms[terms.length - 1].toLowerCase();
esClient.search({
index: 'bigtestindex',
body: {
"query": {
"simple_query_string": {
"fields": ['title'],
"query": baseTerms + '(' + lastTerm + '|' + lastTerm + '*)',
"default_operator": "and"
}
},
"suggest": {
"text": query,
"phraseSuggestion": {
"phrase": {
"field": "title",
"direct_generator": [{
"field": "title",
"suggest_mode": "popular",
"min_word_length": 3,
"prefix_length": 2
}]
}
}
},
"size": 5,
"_source": ["content"]
}
}, function(err, es_return) {
if(err) {
//Handle error or do nothing
return;
}
ctl.suggestions = es_return;
});
};
}
如果我理解正确,您使用的是elasticSearch JS客户端,您不需要发出$http调用,因为客户端会为您执行此操作!如果我理解正确,您使用的是elasticSearch JS客户端,您不需要发出$http调用,因为客户端会为您执行此操作!答案不完全是我想要的,但会接受它,因为它仍然适用答案不完全是我想要的,但会接受它,因为它仍然适用