SuperAPI AI 工具集

spacetimedb-reducers

编程与开发

查看项目

更新于 10-15 20:32

技能介绍

用途:面向 SpacetimeDB reducer 的实现与事务性服务端逻辑,适合在编写 reducer、生命周期 reducer、定时 reducer、reducer 上下文代码、表变更、索引查找与隔离逻辑时使用。

主要能力:reducer 是表变更的事务入口,成功则提交全部表改动,抛出异常、返回错误或 panic 会整体回滚。可处理插入、主键或唯一索引查找单行、按索引列过滤多行、更新(先查后改再调用同一主键索引的 update)、删除,以及用 ctx.sender(TypeScript/C#)或 ctx.sender()(Rust/C++)获取调用方身份(SpacetimeDB 2.0)。

用法:TypeScript 使用 spacetimedb.reducer(args, (ctx, args) => {...}),无参数时为 spacetimedb.reducer((ctx) => {...});C# 使用 [SpacetimeDB.Reducer] public static void Name(ReducerContext ctx, ...);Rust 使用 #[spacetimedb::reducer] pub fn name(ctx: &ReducerContext, ...) -> Result<(), String>,并 import spacetimedb::Table。生命周期 reducer 用 init、client_connected、client_disconnected 变体。自增字段使用触发值(0、0n 等)。

限制与注意:保持 reducer 简短且确定性,外部 I/O 放到 procedures;嵌套 reducer 调用共享同一事务,不是独立提交;预期校验失败用面向发送方的错误,panic 或未检查异常留给程序错误;定时 reducer 由 schedule 表行触发,可能没有客户端发送方;热路径上避免全表 iter() 扫描,除非表确定很小。ctx.sender 的用法需按项目的 SpacetimeDB 版本选择,1.0 到 2.0 迁移可参考 spacetimedb-upgrade,模式问题可参考 spacetimedb-tables。具体参考文件包括 functions-reducers.md、functions-reducers-lifecycle.md、functions-reducers-reducer-context.md、functions-reducers-error-handling.md、functions.md。