React Native中AWS Amplify API listUsers查询返回空结果求助
解决React Native中AWS Amplify API list查询返回Promise状态而非数据的问题
你看到的{"_h": 0, "_i": 0, "_j": null, "_k": null}不是空输出,而是未解析的Promise对象——API.graphql()方法返回的是异步Promise,必须等待它完成解析才能获取真实的查询结果。
正确调用方式
你不需要创建新查询,Amplify生成的listUsers完全可以直接用,参数都是可选的(和你在AppSync控制台的无参数查询逻辑一致),只需要修改调用代码,处理异步逻辑:
方式1:使用async/await(推荐)
// 确保在async函数中执行 const getUsers = async () => { try { // 等待Promise解析 const response = await API.graphql({ query: queries.listUsers }); // 从响应中提取用户数据 const users = response.data.listUsers.items; console.log('用户列表:', users); } catch (err) { console.error('查询失败:', err); } }; // 调用函数 getUsers();
方式2:使用.then()链式调用
API.graphql({ query: queries.listUsers }) .then(response => { const users = response.data.listUsers.items; console.log('用户列表:', users); }) .catch(err => { console.error('查询失败:', err); });
为什么AppSync控制台可以正常返回?
AppSync控制台会自动处理查询的异步逻辑,直接展示解析后的最终结果;而在代码中,你需要手动通过await或.then()来等待Promise完成,否则拿到的只是Promise的内部状态对象,不是实际数据。
关于是否需要创建新查询的结论
完全不需要额外创建无参数查询。Amplify生成的listUsers查询中,$filter、$limit、$nextToken都是可选参数(GraphQL中带$的参数如果没有标记!就是可选的),不传参数时会使用默认值,和你在控制台执行的无参数查询效果完全一致。
内容的提问来源于stack exchange,提问作者KevinKrupa
相关产品推荐
相关产品推荐

