这个javascript承诺是对的吗?

时间:2015-09-19 02:37:53

标签: javascript angularjs angular-ui-typeahead

我正在学习AngularJS并尝试使用Elasticsearch在一个简单的搜索应用程序中实现Angular UI Bootstrap Typeahead。我想使用$ http服务来加载异步结果,并且没有使用js promises。

更新:我已经做了更多的学习和测试

我已将Typeahead包含在我的应用中作为依赖项:

var searchApp = angular.module('searchApp', ['elasticsearch', 'ngSanitize', 'ui.bootstrap']);

这是js promise代码,其ES匹配查询映射到content.autocomplete字段:

this.getSuggestions = function(query) {
var deferred = $q.defer();

esClient.search({
  index: 'bigtestindex',
  body: {
    "query": {
      "match": {
          "content.autocomplete": {
            "query": query,
            "operator": "and"
          }
        }
      },
    "suggest": {
      "text": query,
      "phraseSuggestion": {
        "phrase": {
          "field": "content",
          "direct_generator": [{
            "field": "content",
            "suggest_mode": "popular",
            "min_word_length": 3,
            "prefix_length": 2
          }]
        }
      }
    },
    "size": 5,
    "_source": ["content.autocomplete"]
  }
}).then(function(es_return) {
  deferred.resolve(es_return);
}, function(error) {
  deferred.reject(error);
});

return deferred.promise;

};

使用此代码,我试图实现如here

所示的异步结果

以下是显示可能匹配项的相关html:

<li ng-repeat="gram in autocomplete.edgengrams">
        <p ng-mousedown="searchForSuggestion()"><small>Search Suggestions: &mdash;</small>{{gram.content}}</p>
  </li>

1 个答案:

答案 0 :(得分:0)

$ http.get()已经返回一个promise对象,不需要将结果包装在另一个promise对象中。

供您参考 https://docs.angularjs.org/api/ng/service/$http#get