Angularjs 将具有承诺的ES搜索服务转换为可观测服务
我想知道如何将使用promises(q库)的Elasticsearch的Angular 1.x搜索服务转换为使用Observables的Angular 4.x搜索服务 或 我还看到了toPromise,一个可观察到的转化为承诺,反之亦然。然而,我看到了一些使用Observables进行搜索和自动完成的简单示例,因此Observables似乎是Angular 4中使用HTTP的首选方式 这是我在Angular 1.x中用于自动完成的Angularjs 将具有承诺的ES搜索服务转换为可观测服务,angularjs,angular,observable,angular-promise,
elasticsearch-5,Angularjs,Angular,Observable,Angular Promise,
elasticsearch 5,我想知道如何将使用promises(q库)的Elasticsearch的Angular 1.x搜索服务转换为使用Observables的Angular 4.x搜索服务 或 我还看到了toPromise,一个可观察到的转化为承诺,反之亦然。然而,我看到了一些使用Observables进行搜索和自动完成的简单示例,因此Observables似乎是Angular 4中使用HTTP的首选方式 这是我在Angular 1.x中用于自动完成的 this.getSuggestions = function(q
this.getSuggestions = function(query) {
var deferred = $q.defer();
esClient.search({
index: 'query-index',
body: {
"query": {
"match_phrase_prefix": {
"suggestions": {
"query": query,
"max_expansions": 10,
"lenient": true
}
}
},
"size": 5,
"from": 0,
"_source": ["suggestions"]
}
}).then(function(es_return) {
deferred.resolve(es_return);
}, function(error) {
deferred.reject(error);
});
return deferred.promise;
};
我甚至不知道从哪里开始如何将其转化为可观测的?我想说的是,与其重新发明轮子,不如使用已经建成的东西 您可以使用Angular的弹性搜索库: 或者检查此线程如何适应新的角度版本: 我会选择第一个选项,它包括:
- 角度2弹性搜索
- 自动完成样本
我相信这就是你想要的,对吗 我想说的是,与其重新发明轮子,不如用已经建成的东西 您可以使用Angular的弹性搜索库: 或者检查此线程如何适应新的角度版本: 我会选择第一个选项,它包括:
- 角度2弹性搜索
- 自动完成样本
我相信这就是你想要的,对吗 因为这里没有使用
Http
服务,所以我根本看不出这与可观测数据有什么关系。esClient.search会返回一个承诺,不是吗?使用承诺。当然,您可以在以后将它们升级到Observable,但这会影响多个代码片段。这需要做一些家庭作业,而不是一个问题就能解决。@estus-我已经做了其他的家庭作业,为了简洁起见,我展示了这个片段。。。并且想让问题尽可能简洁。我们不需要像方法一样使用$q.delay
来制造承诺。然后方法已经返回了承诺。看,一个好问题需要知道一半的答案。除非您确定这是代码库中唯一相关的代码段,否则我建议与您分享Angular 4的尝试,因为不应该期望应答者从头开始编写所有代码。@georgeawg有必要,因为esClient.search()可能不是$q承诺。正确的方法是return$q.when(esClient.search())
,但无论如何,这主要是一个问题。因为您在这里没有使用Http
服务,所以我根本看不出这与可观测数据有什么关系。esClient.search会返回一个承诺,不是吗?使用承诺。当然,您可以在以后将它们升级到Observable,但这会影响多个代码片段。这需要做一些家庭作业,而不是一个问题就能解决。@estus-我已经做了其他的家庭作业,为了简洁起见,我展示了这个片段。。。并且想让问题尽可能简洁。我们不需要像方法一样使用$q.delay
来制造承诺。然后方法已经返回了承诺。看,一个好问题需要知道一半的答案。除非您确定这是代码库中唯一相关的代码段,否则我建议与您分享Angular 4的尝试,因为不应该期望应答者从头开始编写所有代码。@georgeawg有必要,因为esClient.search()可能不是$q承诺。正确的方法是返回$q.when(esClient.search())
,但无论如何,这主要是一个问题。