요즘 매일 아침 팀원들과 함께 분량을 정해 약 30분간 기획 강의를 듣는다. 듣고나면 팀장님이 사다리 타기로 한 명을 지정해 문제를 주시는데 오늘은 동료에게 강의 내용 대신 Javascript 문제를 내주셔서 함께 풀어보았다.
Q. 다음 버튼 A를 누르면 Prompt 창이 뜨고, 입력 받은 값이 하단의
<p>
태그에 들어간다.
B 버튼을 눌러 뜨는 모달 창이 동일한 동작을 하도록 코드를 작성하시오.
<button id="aa">값변경(prompt사용)</button>
<button id="bb">값변경(bootstrap modal사용)</button>
<div id="test">안녕하세요. Test 값입니다.</div>
<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<input type="text" class="prompt" id="modal_input" />
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">취소</button>
<button type="button" id="modal_button_ok" class="btn btn-primary">확인</button>
</div>
</div>
</div>
</div>
var myPrompt = function () {
// 정답 작성
}
$(function () {
$("#aa").click(function () {
var a = prompt("값을 입력해주세요.");
if (a) {
$("#test").text(a);
}
});
$("#bb").click(function () {
myPrompt(function (v) {
$("#test").text(v);
});
});
});
문제를 푸는데 메신저로 Promise, Callback이라고 힌트를 주셨다.
아래는 각각 Callback 함수와 Promise를 이용한 답이다.
// Callback 함수 이용
var myPromptCallback = function (o) {
$("#modal_input").val("");
var myModal = new bootstrap.Modal(document.getElementById('exampleModal'), {});
myModal.show();
document.getElementById('modal_button_ok').addEventListener("click", function () {
o($("#modal_input").val());
this.removeEventListener("click", arguments.callee);
myModal.hide();
});
}
// Promise 이용
var myPromptPromise = function () {
$("#modal_input").val("");
var myModal = new bootstrap.Modal(document.getElementById('exampleModal'), {});
myModal.show();
return new Promise(function (resolve, reject) {
document.getElementById('modal_button_ok').addEventListener("click", function () {
resolve($("#modal_input").val());
this.removeEventListener("click", arguments.callee);
myModal.hide();
});
});
}
$(function () {
$("#aa").click(function () {
var a = prompt("값을 입력해주세요.");
if (a) { // 값이 입력된 경우에만 변경된다.
$("#test").text(a);
}
});
$("#bb").click(function () {
myPromptCallback(function (v) {
$("#test").text(v);
});
});
$("#cc").click(function () {
myPromptPromise().then(function (v) {
$("#test").text(v);
});
});
});
간단한 로직이기 때문에 두 문법이 거의 유사한 방식인 것을 알 수 있다.
다만, Callback 처리를 다중으로 해야 할 경우 콜백을 인자로 넘겨야 하는 것이 문제가 될 수 있는데, Promise는 그럴 필요가 없어 특정 상황에서 조금 더 나은 방식이라고 한다.
'Tech > JavaScript' 카테고리의 다른 글
Global Object (0) | 2021.08.06 |
---|---|
rest와 spread (0) | 2021.07.22 |
CDN으로 IE에서 ES6 문법 사용하기 (0) | 2021.04.22 |
Parameter와 Argument의 차이 (0) | 2021.04.13 |
Google Charts - 반응형 차트 적용하기 (0) | 2021.04.13 |