有没有一种方法可以在此algolia示例代码中使用async / await?

时间:2020-11-07 13:24:31

标签: javascript async-await es6-promise algolia

鉴于我的graphQL服务器始终会收到一个空数组,因此我将要放在此处的代码不起作用...我知道这是因为调用在数据可用之前完成了。关于诺言的丰富经验,所以我想知道如何使它发挥作用,我玩了一堆不同的组合来尝试等待响应,这样我就可以将一组ID传递回操场上... browserwr。 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;

1 个答案:

答案 0 :(得分:1)

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

但是您也可以手动返回Promise实例。它接受带有@clear.error async def clear_error(ctx, error): if isinstance(error, CheckFailure): time.sleep(0.5) print("No Permission!") await ctx.send(f'You have no permission!') 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

类似的问题: