AWS Datastore查询已有数据返回undefined问题求助
AWS Datastore查询返回undefined但Amplify Studio可见的排查方案
此前可正常返回数据的Datastore查询突然返回undefined,但Amplify Studio内容板块中能看到对应数据,示例代码如下:
useEffect(() => { DataStore.query(Lands, (l) => [ l.available.eq(false), l._deleted.eq(null), ]).then(setLands); console.log("lands = ", lands); }, []);
以下是具体排查和解决步骤:
修正异步时序问题:当前代码中
console.log在DataStore.query异步操作完成前执行,此时lands还是初始状态(大概率是undefined)。调整代码将日志移至回调内:useEffect(() => { DataStore.query(Lands, (l) => [ l.available.eq(false), l._deleted.eq(null), ]).then(result => { setLands(result); console.log("lands = ", result); }); }, []);校验查询条件逻辑:
- 确认
available字段类型为布尔值,且Amplify Studio中目标数据的available值确实是false - Datastore软删除后
_deleted字段为布尔值而非null,建议将过滤条件改为l._deleted.eq(false),或直接省略该条件(Datastore默认不返回已删除数据)
- 确认
同步本地与云端数据:本地Datastore缓存可能与云端不同步,执行以下操作:
- 终端运行命令手动同步:
amplify datastore sync - 或在代码中主动触发同步后再查询:
useEffect(() => { const fetchData = async () => { await DataStore.sync(); const landsData = await DataStore.query(Lands, l => l.available.eq(false)); setLands(landsData); }; fetchData(); }, []);
- 终端运行命令手动同步:
检查依赖版本一致性:确保
@aws-amplify/core和@aws-amplify/datastore版本一致,避免版本冲突。运行以下命令查看版本:npm list @aws-amplify/core @aws-amplify/datastore若版本不一致,重新安装依赖:
npm install @aws-amplify/core@latest @aws-amplify/datastore@latest开启调试日志排查:添加日志输出查看Datastore请求细节,定位问题:
import { Amplify, Logger } from 'aws-amplify'; Logger.LOG_LEVEL = 'DEBUG';查看控制台的Datastore日志,检查请求参数、响应数据及可能的错误信息。
内容的提问来源于stack exchange,提问作者Laspeed
相关产品推荐
相关产品推荐

