You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AssemblyScript子图事件处理函数返回值会引发索引失败吗?

问题原因及解决办法

Subgraph对事件处理函数的签名有强制要求:必须返回void类型。

  • 虽然AssemblyScript编译器允许你定义CreationEntity | null这类返回类型(语法合法),但Subgraph的运行时环境不会处理任何非void的返回值,一旦检测到函数返回类型不是void,就会直接触发索引失败,且不会给出详细错误提示——这就是你只看到索引失败的原因。
  • 原始代码返回void,符合Subgraph的运行要求,所以能正常执行;修改后的代码返回实体或null,违反了运行时的函数签名规范,导致索引失败。

单元测试简化方案

如果想简化单元测试,不要修改事件处理函数的返回类型,而是可以:

  1. 将实体创建/更新的逻辑抽离成独立的辅助函数,让辅助函数返回实体对象,单元测试可以直接调用这个辅助函数验证结果。
  2. 事件处理函数内部调用这个辅助函数,保持返回void的签名,既满足Subgraph运行要求,又能通过辅助函数实现单元测试的便捷性。

示例代码:

// 抽离的辅助函数,供单元测试调用
function createCreationEntity(event: EventCreation): CreationEntity {
  const entity = new CreationEntity(event.params.id);
  // 填充实体字段逻辑
  entity.field1 = event.params.field1;
  // ...其他赋值操作
  return entity;
}

// 符合Subgraph要求的事件处理函数
export function handleEventCreation(event: EventCreation): void {
  const entity = createCreationEntity(event);
  save(entity); // 保存实体到Subgraph
}

这样既不破坏Subgraph的运行规范,又能通过测试createCreationEntity函数来验证实体逻辑,达到简化单元测试的目的。

内容的提问来源于stack exchange,提问作者gagiuntoli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 20:14:55