logologo
Empezar
Manual
Desarrollo
Plugins
API
Inicio
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Empezar
Manual
Desarrollo
Plugins
API
Inicio
logologo
Descripción general de RunJS
Importación de módulos
Renderizado en contenedor

Variables globales

window
document
navigator

ctx

ctx.blockModel
ctx.collection
ctx.collectionField
ctx.dataSource
ctx.dataSourceManager
ctx.element
ctx.exit()
ctx.exitAll()
ctx.filterManager
ctx.form
ctx.getModel()
ctx.getValue()
ctx.getVar()
ctx.i18n
ctx.importAsync()
ctx.initResource()
ctx.libs
ctx.location
ctx.logger
ctx.makeResource()
ctx.message
ctx.modal
ctx.model
ctx.notification
ctx.off()
ctx.on()
ctx.openView()
ctx.render()
ctx.request()
ctx.requireAsync()
ctx.resource
ctx.route
ctx.router
ctx.setValue()
ctx.sql
ctx.t()
ctx.view
Previous Pagectx.element
Next Pagectx.exitAll()
Aviso de traducción IA

Este documento ha sido traducido por IA. Para información precisa, consulte la versión en inglés.

#ctx.exit()

Finaliza la ejecución del flujo de eventos actual; los pasos posteriores no se ejecutarán. Se utiliza comúnmente cuando no se cumplen las condiciones de negocio, el usuario cancela o ocurre un error irrecuperable.

#Casos de uso

ctx.exit() se utiliza generalmente en los siguientes contextos donde se puede ejecutar JS:

EscenarioDescripción
Flujo de eventosEn flujos de eventos activados por el envío de formularios, clics en botones, etc., finaliza los pasos posteriores cuando no se cumplen las condiciones.
Reglas de vinculaciónEn vinculaciones de campos, vinculaciones de filtros, etc., finaliza el flujo de eventos actual cuando falla la validación o es necesario omitir la ejecución.
Eventos de acciónEn acciones personalizadas (por ejemplo, confirmación de eliminación, validación previa al guardado), sale cuando el usuario cancela o la validación no es satisfactoria.

Diferencia con ctx.exitAll(): ctx.exit() solo finaliza el flujo de eventos actual; otros flujos de eventos bajo el mismo evento no se ven afectados. ctx.exitAll() finaliza el flujo de eventos actual, así como cualquier flujo de eventos posterior bajo el mismo evento que aún no se haya ejecutado.

#Definición de tipo

exit(): never;

Al llamar a ctx.exit() se lanza una excepción interna FlowExitException, que es capturada por el motor de flujos para detener la ejecución del flujo de eventos actual. Una vez invocado, las sentencias restantes en el código JS actual no se ejecutarán.

#Comparación con ctx.exitAll()

MétodoAlcance del efecto
ctx.exit()Finaliza solo el flujo de eventos actual; los flujos de eventos posteriores no se ven afectados.
ctx.exitAll()Finaliza el flujo de eventos actual y aborta los flujos de eventos posteriores bajo el mismo evento que estén configurados para ejecutarse secuencialmente.

#Ejemplos

#Salir al cancelar el usuario

// En una ventana modal de confirmación, finalizar el flujo de eventos si el usuario hace clic en cancelar
if (!confirmed) {
  ctx.message.info('Operación cancelada');
  ctx.exit();
}

#Salir cuando falla la validación de parámetros

// Notificar y finalizar cuando la validación falle
if (!params.value || params.value.length < 3) {
  ctx.message.error('Parámetros inválidos, la longitud debe ser al menos 3');
  ctx.exit();
}

#Salir cuando no se cumplen las condiciones de negocio

// Finalizar si no se cumplen las condiciones; los pasos posteriores no se ejecutarán
const record = ctx.model?.getValue?.();
if (!record || record.status !== 'draft') {
  ctx.notification.warning({ message: 'Solo se pueden enviar borradores' });
  ctx.exit();
}

#Elección entre ctx.exit() y ctx.exitAll()

// Solo el flujo de eventos actual necesita salir → Use ctx.exit()
if (!params.valid) {
  ctx.message.error('Parámetros inválidos');
  ctx.exit();  // Otros flujos de eventos no se ven afectados
}

// Es necesario finalizar todos los flujos de eventos posteriores bajo el evento actual → Use ctx.exitAll()
if (!ctx.model?.context?.getPermission?.()) {
  ctx.notification.warning({ message: 'Permisos insuficientes' });
  ctx.exitAll();  // Tanto el flujo de eventos actual como los flujos de eventos posteriores bajo el mismo evento finalizan
}

#Salir según la elección del usuario tras la confirmación en una ventana modal

const ok = await ctx.modal?.confirm?.({
  title: 'Confirmar eliminación',
  content: 'Esta acción no se puede deshacer. ¿Desea continuar?',
});
if (!ok) {
  ctx.message.info('Cancelado');
  ctx.exit();
}

#Notas

  • Después de llamar a ctx.exit(), el código posterior en el JS actual no se ejecutará; se recomienda explicar el motivo al usuario a través de ctx.message, ctx.notification o una ventana modal antes de llamarlo.
  • Normalmente no es necesario capturar FlowExitException en el código de negocio; deje que el motor de flujos lo gestione.
  • Si necesita finalizar todos los flujos de eventos posteriores bajo el evento actual, utilice ctx.exitAll().

#Relacionado

  • ctx.exitAll(): Finaliza el flujo de eventos actual y los flujos de eventos posteriores bajo el mismo evento.
  • ctx.message: Mensajes de aviso.
  • ctx.modal: Ventanas modales de confirmación.