鉴于我的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;
答案 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
类似的问题: