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 要谨慎使用,因为它可能会影响表单的性能。