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

如何在Petriflow中使用async.run修改数据值?

问题根因

  • async.run 属于非阻塞异步逻辑,主流程不会等待异步块执行完成,就会走完当前action的生命周期,框架会提前把还没被修改的旧text值持久化到Mongo。等异步块完成text值修改时,已经没有自动持久化逻辑触发,所以数据库字段不会更新。
  • 若change text value仅修改了内存中的对象属性,没有主动触发数据库写入操作,也会导致变更无法同步到Mongo。

解决方案

方案1:同步执行修改逻辑

如果没有必须后台异步执行的强需求,直接把修改逻辑放到主流程中即可,框架自动持久化时会抓取最新值:

text: f.text;
// 同步修改值
text = "My async text";

方案2:异步块内主动触发数据库写入

如果确实需要异步执行,在修改完值后手动调用Mongo的更新接口,主动把变更写入数据库:

text: f.text;
async.run {
  const updatedText = "My async text";
  change text value { return updatedText }
  // 替换为你实际使用的集合名、记录ID字段即可
  await db.collection('你的集合名称').updateOne(
    { _id: 当前记录的ID },
    { $set: { text: updatedText } }
  )
}

方案3:等待异步逻辑执行完成再结束主流程

如果想复用框架的自动持久化能力,添加await等待异步块执行完成,再走后续的持久化流程:

text: f.text;
// 等待异步逻辑执行完成
await async.run {
  change text value { return "My async text" }
}

注意:如果当前运行环境不支持顶层await,需要把整段逻辑包裹在async函数中执行。

内容的提问来源于stack exchange,提问作者Ľuboš Petrovič

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:27:04