2017-10-26 13 views
0

私はElasticSearchの結果を得るこのメソッドを持っています。私はそれがそれらを取得している知っているので、私は結果をログに記録することができます。..なぜこの約束(async/await)が待たれていないのですか

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

原因* querySearch *は何も(別名*不定*) –

+2

'client.scrollを待つの予想結果は何も返しませんか? – guest271314

+0

@ guest271314、ElasticSearchの次のセット(次のスクロールページ)を取得します。サブメソッドはスクロールページをループしてすべての結果を取得します。 – brainstormtrooper

答えて

1

@ Kaiidoさんのアドバイスのおかげで、私はメソッドを書き直してコールバックを削除しました。私はコールバックを独自のメソッドにしました。今はすべて正常に動作します。 ({:response._scroll_id、 スクロール:30年代 " scrollId}、待つgetNextResults)`

関連する問題