메시지박스 동기 로드
메시지박스를 비동기/동기 방식으로 로드하는 기능에 대한 샘플화면이다.
자바스크립의 Promise 오브젝트를 사용하는 방법인 async, await 문법(ECMAScript (ECMA-262)을 사용한다.
동기 방식 API 함수를 호출하는 함수는 async function이어야하며, await 문법을 이용해서 동기 방식 API를 호출해야 한다.
동기 방식 API는 IE에서는 지원되지 않는다.
비동기 방식 메시지박스 로드 API는 메시지박스 로드를 시작하고 바로 리턴한다. (사용자 버튼 선택은 화면의 on_messagebox 이벤트를 통해서 확인)
동기 방식 메시지막스 로드 API는 메시지박스 표시 및 사용자 버튼 선택이 완료되면 리턴한다.
관련 API로 messagebox, messageboxsync가 있다.
관련 이벤트로 on_messagebox가 있다.
예시
화면 스크립트
// 화면 로드 이벤트 function screen_on_load() { factory.showconsoletrace(true); } /** * messagebox API를 통해서 로드된 메시지박스에서 사용자가 버튼 클릭하여 메시지박스가 닫힐때 발생하는 이벤트 * * @param messagebox_id messagebox API 호출시 전달한 strMessageBoxId 파라미터 값 * @param result 메시지박스에서 사용자가 선택한 버튼값 */ function screen_on_messagebox(messagebox_id, result) { screen.alert("screen_on_messagebox> messagebox_id = " + messagebox_id + ", result = " + result); } // "messagebox" 버튼 이벤트 function btn_messagebox_async_on_mouseup(objInst) { // 비동기식 메시지 박스 표시 및 화면의 on_messagebox 이벤트를 통해서 사용자가 선택한 값 구함 factory.consoleprint("messagebox> before messagebox"); screen.messagebox("어떤 내용을 선택하시겠습니까?", "선택", XFD_MB_QUESTION, XFD_MB_YESNOCANCEL, XFD_MB_FOCUSBUTTON1, "ASYNC_MSG_BOX"); factory.consoleprint("messagebox> after messagebox"); } // "messageboxsync" 버튼 이벤트 async function btn_messagebox_sync_on_mouseup(objInst) { var log_prefix, result; log_prefix = "messageboxsync> "; // 동기식 메시지박스 표시 및 대기 // messageboxsync API 호출시 "on_messagebox" 이벤트가 발생하지 않는다. factory.consoleprint(log_prefix + "before messageboxsync"); result = await screen.messageboxsync("어떤 내용을 선택하시겠습니까?", "선택", XFD_MB_QUESTION, XFD_MB_YESNOCANCEL, XFD_MB_FOCUSBUTTON1); factory.consoleprint(log_prefix + "after messageboxsync"); factory.consoleprint(log_prefix + "messageboxsync result = " + result); } // "messageboxsync promise" 버튼 이벤트 function btn_messagebox_sync_promise_on_mouseup(objInst) { var log_prefix, result, promise; log_prefix = "messageboxsync_promise> "; // async/await 문법을 사용하지 않고 동기식 메시지박스 표시 및 대기 // messageboxsync API 호출시 "on_messagebox" 이벤트가 발생하지 않는다. factory.consoleprint(log_prefix + "before messageboxsync"); promise = screen.messageboxsync("어떤 내용을 선택하시겠습니까?", "선택", XFD_MB_QUESTION, XFD_MB_YESNOCANCEL, XFD_MB_FOCUSBUTTON1); factory.consoleprint(log_prefix + "after messageboxsync"); promise.then(function(result) { factory.consoleprint(log_prefix + " then result = " + result); }); promise.catch(function(err) { screen.alert(log_prefix + "catch err = " + err); }); }