我有这种方法可以从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;
}
为什么会发生这种情况,我该如何解决?如何从我的子方法中获取我的命中集?
答案 0 :(得分:1)
感谢@Kinido的建议,我刚刚重写了我的方法并删除了回调。我将回调作为自己独立的方法,现在一切正常。