SuperAPI AI 工具集

convex-actions

编程与开发

查看项目

更新于 10-15 10:47

技能介绍

用途

Convex Actions 是一份关于 Convex 平台中 Action、事务与调度的最佳实践指南。它面向需要在 Convex 应用中编写 Action 的开发者,帮助其正确处理外部 API 调用、数据库读写以及异步任务调度。

函数类型概览

Convex 提供三种函数类型,各自在数据库访问、外部 API 调用和缓存方面能力不同:

  • Query:只读数据库,不能调用外部 API,支持响应式缓存,用于获取数据。
  • Mutation:可读写数据库,不能调用外部 API,无缓存,用于修改数据。
  • Action:通过 runQuery/runMutation 访问数据库,可以调用外部 API,无缓存,用于外部集成。

主要能力与使用方式

使用 Node.js 运行时

在需要使用 Node.js API 的文件顶部添加 "use node"; 指令。示例中展示了通过 action 调用 Resend 邮件 API 的写法,包括从 process.env 读取 API Key、使用 fetch 发送请求并返回结果。

调度函数

使用 ctx.scheduler.runAfter 调度函数。示例中在 mutation 内插入任务后,通过 ctx.scheduler.runAfter(0, internal.tasks.processTask, { taskId }) 调度内部函数处理任务,并强调调度时应始终使用 internal 函数。

仅在切换运行时时使用 runAction

除非需要切换运行时,否则应使用普通 TypeScript 函数替代 runAction,以减少不必要的开销。示例对比了 ctx.runAction 与直接导入并调用普通函数两种写法。

避免顺序调用 ctx.runMutation / ctx.runQuery

每次调用都在独立事务中运行。指南建议将多次读取合并为单次一致性查询,将循环插入合并为原子批量操作,以保证一致性。例外情况包括迁移、聚合,或调用之间存在副作用时。

在 Query/Mutation 中优先使用辅助函数

使用普通 TypeScript 辅助函数而非 ctx.runQuery/ctx.runMutation,以减少开销。例外是需要部分回滚时,可使用 ctx.runMutation 并在 catch 中记录失败。

始终 await 异步操作

所有异步操作都应 await,包括 ctx.scheduler.runAfter 和 ctx.db.patch。建议启用 ESLint 的 no-floating-promises 规则。

完整 Action 示例

指南提供了一个支付处理 Action 的完整示例:先通过 ctx.runQuery 读取订单,再调用 Stripe API,最后通过 ctx.runMutation 更新订单状态并返回结果。

适用场景

适用于在 Convex 中编写需要调用外部 API 的 Action,例如发送邮件、处理支付、抓取页面,以及需要调度后台任务或保证数据库操作一致性的场景。

限制

资料未提供关于收费、价格、平台支持范围或性能指标的具体信息。