有没有办法在这个 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(...)
类似问题:
由于我的 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(...)
类似问题: