将带有承诺的 ES 搜索服务转换为 Observables

Converting ES search service with promises to Observables

我想弄清楚如何将使用 promises(q 库)的 Elasticsearch 的 Angular 1.x 搜索服务转换为 Angular 4.x使用 Observables 的搜索服务?

我还看到了 toPromise,其中 Observable 被转换为 promise,反之亦然。但是,我已经看到了一些使用 Observables 进行搜索和自动完成的简单示例,因此 Observables 似乎是 Angular 4.

中使用 HTTP 的首选方式

这是我在 Angular 1.x

中用于自动完成的内容
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;
  };

关于如何将其转换为 Observable,我什至不确定从哪里开始?

我想说的是,与其重新发明轮子,不如使用构建的东西。

您可以使用这个 Angular 的弹性搜索库:

https://github.com/byavv/angular2-elastic

或查看此线程如何适应新的 Angular 版本:

https://github.com/elastic/elasticsearch-js/issues/452#issuecomment-286738342

我会选择第一个选项,它包括:

  • Angular2 弹性搜索
  • 自动完成示例

我相信这就是您要找的,对吧?