如何在单次FaunaDB请求中按顺序执行多条查询?
FaunaDB 单次调用顺序执行多查询解决方案
你可以在单次FaunaDB调用中按顺序执行多条查询,遇到的报错是由数组内查询并行执行的特性导致的。
问题原因
你用数组包裹多条查询时,FQL会并行求值数组内的所有表达式,不会等待前一条查询执行完成。因此创建索引的查询在尝试获取Collection("users")引用时,创建集合的查询还未执行完成,自然会抛出Cannot read reference错误。
解决方法
使用FQL内置的Do函数包裹所有需要按顺序执行的查询,Do函数会严格按照传入顺序逐个执行表达式,前一个执行完成后才会启动下一个,最终返回最后一个表达式的执行结果。
正确写法示例:
Do( CreateCollection({ name: "users" }), CreateIndex({ name: "users_by_email", permissions: { read: "public" }, source: Collection("users"), terms: [{field: ["data", "email"]}], unique: true }) )
补充说明
- 如果你需要获取所有查询的执行结果,可以在
Do函数的最后,把前面所有操作的返回值拼装成数组返回即可。 - 该操作全程属于同一个事务,任意一条查询执行失败,整个事务都会回滚,不会出现只创建了集合没创建索引的中间状态。
内容的提问来源于stack exchange,提问作者Evan Summers
相关产品推荐
相关产品推荐

