有没有办法在这个 algolia 示例代码中使用 async/await?

Is there a way to use async/await with this algolia example code?

由于我的 graphQL 服务器总是收到一个空数组,我将要放在这里的这段代码不起作用......我知道这是因为调用在数据可用之前完成......我不知道我对 promises 没有太多经验,所以我想知道如何让它工作,我尝试了一堆不同的组合来尝试等待响应,这样我就可以将一组 id 传回操场...... browsewr.on(end) 部分工作正常并且正确的数据显示在控制台中?有人愿意为我解答一下吗?

  const browser = await lookbookIndex.browseAll();
  let hits = [];
  let returnArray = [];

  browser.on('result', (content) => {
    hits = hits.concat(content.hits);
  });

  browser.on('end', () => {
    console.log('Finished!');
    console.log('We got %d hits', hits.length);
    returnArray = hits ? hits.map(a => a.objectID) : [];
  });

  browser.on('error', err => err);

  return returnArray;

异步语法自动将所有内容包装到 Promise 实例。

但您也可以 return Promise 手动实例化。它接受带有 resolve & reject 参数的回调。您可以调用 resolve 来解决承诺:

async function search() {
    const browser = await lookbookIndex.browseAll();
    return new Promise((resolve, reject) => {
        let hits = [];

        browser.on('result', (content) => {
            hits = hits.concat(content.hits);
        });

        browser.on('end', () => {
            console.log('Finished!');
            console.log('We got %d hits', hits.length);
            resolve(hits ? hits.map(a => a.objectID) : [])
        });

        browser.on('error', err => reject(err));
    })
}

你可以await承诺:

await new Promise(...)

类似问题: