Skip to main content

Form BeforeSave

beforeSave 事件在用户点击 保存 或者 提交 按钮后,在进行数据校验之前发生。

支持异步事件处理

beforeSave 事件处理程序有能力支持以异步的方式处理程序逻辑。当事件处理程序返回一个 Promise 时,beforeSave 事件变为异步。注意,beforeSave 脚本处理逻辑是有超时限制的,每一个 beforeSave 事件处理时间不能超过 10 秒。

beforeSave 事件只会等待处理程序返回一个 Promise 。如果需要在处理程序中处理多个 Promise,建议将所有 Promise 包装在 Promise.all() 方法中并返回单个结果 Promise。这可以尽量减少超时导致的等待时间。

如果在 beforeSave 处理程序中抛出一个异常,则会直接终止处理程序执行。您也可以通过调用 ctx.getEventArgs().cancel()取消保存操作。如果调用此方法,beforeSave 事件仍将继续执行完成,但后续的 onSave 事件不会发生。

异步事件处理超时

使用异步处理程序时,表单加载将等待承诺被履行。为确保加载按时完成,处理程序会在 10 秒后引发超时异常,以便让您知道并且去调整异步 beforeSave 事件以获得更好的性能。

在某些情况下,您可能希望挂起 beforeSave 执行,这时候如果发生超时将产生超时错误。一个例子是在异步beforeSave 中打开一个对话框并会等待用户进行确认。此时要确保 beforeSave 异步操作一直等待,您可以通过 调用 beforeSave 事件参数中ctx.getEventArgs().disableAsyncTimeout()。设置 disableAsyncTimeout 时,将不会应用该处理程序的超时。它将继续等待该处理程序执行完成。

caution

disableAsyncTimeout 要谨慎使用,因为它可能会影响表单的性能。