为什么不等待这个承诺(async / await)

时间:2017-10-26 07:20:06

标签: javascript asynchronous elasticsearch async-await

我有这种方法可以从ElasticSearch获得结果。我可以记录结果,所以我知道它正在得到它们。

async querySearch(queryObj) {
  let hits = [];
  const client = this.client;
  client.search({
    index: this.index,
    scroll: '30s',
    body: {
      query: {
        match: {
          _all: queryObj.q,
        },
      },
    },
  }, async function getNextResults(error, response) {
    console.log(' getting more... ');
    response.hits.hits.forEach((hit) => {
      hits.push(hit);
      console.log(' >> hits is ', hits.length);
    });

    if (response.hits.total > hits.length) {
      await client.scroll({
        scrollId: response._scroll_id,
        scroll: '30s'
      }, await getNextResults);
    } else {
      console.log(`NOW ${response.hits.total} <= ${hits.length}`);
      console.log(' XXX hits is ', hits.length);
      // console.log('got lota of results : ', hits);
      return hits;
    }
  });
}

但是来电者在这里得到了“未定义”的信息。并且不等待结果通过......

  async querySearch(queryObj) {
    const hits = await this.connector.querySearch(queryObj);

    return hits;
  }

为什么会发生这种情况,我该如何解决?如何从我的子方法中获取我的命中集?

1 个答案:

答案 0 :(得分:1)

感谢@Kinido的建议,我刚刚重写了我的方法并删除了回调。我将回调作为自己独立的方法,现在一切正常。