logologo
시작
가이드
개발
플러그인
API
홈
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
시작
가이드
개발
플러그인
API
홈
logologo
RunJS 개요
모듈 가져오기
컨테이너 내 렌더링

전역 변수

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()
AI 번역 알림

이 문서는 AI에 의해 번역되었습니다. 정확한 정보는 영어 버전을 참조하세요.

#ctx.exit()

현재 이벤트 흐름의 실행을 종료하며, 이후 단계는 실행되지 않습니다. 주로 비즈니스 조건이 충족되지 않거나, 사용자가 취소하거나, 복구 불가능한 오류가 발생했을 때 사용됩니다.

#적용 사례

ctx.exit()는 일반적으로 JS 실행이 가능한 다음과 같은 컨텍스트에서 사용됩니다:

시나리오설명
이벤트 흐름양식 제출, 버튼 클릭 등으로 트리거된 이벤트 흐름에서 조건이 충족되지 않을 때 후속 단계를 중단합니다.
연동 규칙필드 연동, 필터 연동 등에서 유효성 검사에 실패하거나 실행을 건너뛰어야 할 때 현재 이벤트 흐름을 종료합니다.
작업 이벤트사용자 정의 작업(예: 삭제 확인, 저장 전 유효성 검사)에서 사용자가 취소하거나 유효성 검사를 통과하지 못했을 때 종료합니다.

ctx.exitAll()과의 차이점: ctx.exit()는 현재 이벤트 흐름만 종료하며, 동일한 이벤트 내의 다른 이벤트 흐름에는 영향을 주지 않습니다. ctx.exitAll()은 현재 이벤트 흐름과 동일한 이벤트 내에서 아직 실행되지 않은 후속 이벤트 흐름을 모두 종료합니다.

#타입 정의

exit(): never;

ctx.exit()를 호출하면 내부적으로 FlowExitException이 발생하며, 이벤트 흐름 엔진이 이를 캡처하여 현재 이벤트 흐름의 실행을 중단합니다. 호출되는 즉시 현재 JS 코드의 나머지 구문은 실행되지 않습니다.

#ctx.exitAll()과의 비교

메서드영향 범위
ctx.exit()현재 이벤트 흐름만 종료하며, 후속 이벤트 흐름은 영향을 받지 않음
ctx.exitAll()현재 이벤트 흐름을 종료하고, 동일한 이벤트 내에서 순차적으로 실행되는 후속 이벤트 흐름을 중단함

#예제

#사용자 취소 시 종료

// 확인 팝업에서 사용자가 취소를 클릭하면 이벤트 흐름을 종료합니다.
if (!confirmed) {
  ctx.message.info('작업이 취소되었습니다');
  ctx.exit();
}

#매개변수 유효성 검사 실패 시 종료

// 유효성 검사 실패 시 알림을 표시하고 종료합니다.
if (!params.value || params.value.length < 3) {
  ctx.message.error('매개변수가 유효하지 않습니다. 길이는 최소 3자 이상이어야 합니다.');
  ctx.exit();
}

#비즈니스 조건 미충족 시 종료

// 조건이 충족되지 않으면 종료하며, 이후 단계는 실행되지 않습니다.
const record = ctx.model?.getValue?.();
if (!record || record.status !== 'draft') {
  ctx.notification.warning({ message: '초안 상태만 제출할 수 있습니다' });
  ctx.exit();
}

#ctx.exit()와 ctx.exitAll() 선택 기준

// 현재 이벤트 흐름만 종료해야 하는 경우 → ctx.exit() 사용
if (!params.valid) {
  ctx.message.error('매개변수가 유효하지 않습니다');
  ctx.exit();  // 다른 이벤트 흐름은 영향을 받지 않음
}

// 현재 이벤트 내의 모든 후속 이벤트 흐름을 종료해야 하는 경우 → ctx.exitAll() 사용
if (!ctx.model?.context?.getPermission?.()) {
  ctx.notification.warning({ message: '권한이 부족합니다' });
  ctx.exitAll();  // 메인 이벤트 흐름 및 동일 이벤트 내의 후속 이벤트 흐름이 함께 종료됨
}

#팝업 확인 후 사용자 선택에 따라 종료

const ok = await ctx.modal?.confirm?.({
  title: '삭제 확인',
  content: '삭제 후에는 복구할 수 없습니다. 계속하시겠습니까?',
});
if (!ok) {
  ctx.message.info('취소되었습니다');
  ctx.exit();
}

#주의 사항

  • ctx.exit() 호출 후에는 현재 JS의 후속 코드가 실행되지 않습니다. 호출 전에 ctx.message, ctx.notification 또는 팝업을 통해 사용자에게 이유를 설명하는 것이 좋습니다.
  • 비즈니스 코드에서 FlowExitException을 직접 캡처할 필요는 없으며, 이벤트 흐름 엔진이 처리하도록 두면 됩니다.
  • 현재 이벤트 내의 모든 후속 이벤트 흐름을 종료해야 하는 경우 ctx.exitAll()을 사용하십시오.

#관련 정보

  • ctx.exitAll(): 현재 이벤트 흐름 및 동일 이벤트 내의 후속 이벤트 흐름 종료
  • ctx.message: 메시지 알림
  • ctx.modal: 확인 팝업