How do I return the response from an asynchronous call?에서 '사용 약속'섹션을 읽거나 시도했지만 해당 예제에는 매개 변수가 포함되어 있지 않습니다 (하지만 아래 코드에서 정상적으로 전달 된 것 같습니다) 유사한 코드를 추가했을 때도 작동하지 않습니다 (아래 참조). 내가 십자가에 오게 한 다른 어떤 것도 코드 작업에 가깝게 접근하지 못했습니다. 본질적으로 'callingFunction'은 onLoad 동안 호출되며 매개 변수를 myDialog에 전달하고 알림을 계속하기 전에 사용자 응답을 기다려야합니다 (이 단순화 된 예제에서). 이제는 '시작'및 '종료'경고가 표시되는 방식으로 대화 상자가 표시됩니다. 두 버튼 중 하나를 클릭하면 (처음으로 만) '죄송합니다'라고 표시됩니다. 따라서 코드는 현재 약속 배달을 기다리지 않고 해결 값을 올바르게 확인하지 않습니다. 이 문제를 어떻게 해결할 수 있습니까?약속 및 매개 변수 전달을 사용하여 작업중인 자바 스크립트 대화 상자를 시도하는 중
function myDialog(question) {
return new Promise(function(resolve, reject) {
var box = document.createElement('div');
box.style.position = "absolute";
box.style.top = "300px";
box.style.left = "300px";
box.style.width = "200px";
box.style.height = "100px";
var text = document.createTextNode(question);
text.margin = "20px";
box.appendChild(text);
var button_yes = document.createElement("button");
button_yes.innerHTML = "Yes";
button_yes.onclick = function() { resolve(true); }
box.appendChild(button_yes);
var button_no = document.createElement("button");
button_no.innerHTML = "No";
button_no.onclick = function() { resolve(false); }
box.appendChild(button_no);
window.parent.document.body.appendChild(box);
})
}
function callingFunction(question) {
alert('start');
myDialog(question).then(function(v) {
window.parent.document.body.removeChild(box);
if (v == true) {
alert('true selected');
}else{
alert('false selected');
}
}).catch(function(v) {
alert('oops');
});
alert('end');
}
다른 눈의 쌍을 가져 주셔서 감사합니다! 이번에는 상자 오류가 발생하지 않았지만 적절한 값을 해결하는 문제가 해결되었습니다. 이제 약속 끝내기를 기다리는 방법을 경고 끝을 표시하기 전에 설정합니까? 해결 값을 먼저 필요로하는 'end'다음에 코드를 실행하고 있습니다. –
'alert (v + 'selected')'직후'then' 콜백 안에'alert (end)'를 넣어야합니다. 바깥으로 가져 가면 결코 작동하지 않을 것입니다 - 비동기의 멋진 세계에 오신 것을 환영합니다! – Bergi
아, 알았다. 아무것도 아닌 것보다 낫다는 것을 짐작하십시오. 외부 코드를 단순한 함수 호출로 유지하여 추가 코드 용 변수를 설정하고자했습니다. 통찰력을 가져 주셔서 대단히 감사합니다. –