지연/약속에 문제가 있습니다. 나는 순차적으로 실행되어야하는 두 개의 함수를 호출하는 주요 함수를 가지고있다. 첫 번째는 직렬로 먼저 실행해야하는 일련의 비동기 웹 서비스 호출을 포함합니다. 하지만 실제로 두 번째 함수는 첫 번째 함수에서 모든 비동기 피드백이 오기 전에 호출됩니다. https://fiddle.jshell.net/qLf1c0uq/ 여기jQuery deferred : 메소드에서 중첩 약속, 너무 늦은 마지막 콜백
는 참조 코드입니다 :
나는 내 문제를 보여주는 작은 예를 건설하는 세 번째 기능이 종료하기 전에 GroupFunction2가 시작function first() {
$('ul').append("<li>first started</li>");
let deferred = $.Deferred();
setTimeout(function() { // Any async function.
$('ul').append("<li>first ended</li>");
deferred.resolve();
}, 2000);
return deferred.promise();
}
function second(da) {
$('ul').append("<li>second started</li>");
let deferred = $.Deferred();
$('ul').append("<li>second ended</li>");
deferred.resolve();
return deferred.promise();
}
function third(da) {
$('ul').append('<li>third started</li>')
let deferred = $.Deferred();
setTimeout(function() {
$('ul').append("<li>third ended</li>");
deferred.resolve();
}, 2000);
return deferred.promise();
}
function GroupFunction1() {
let deferred = $.Deferred();
$('ul').append("<li>Group 1 started</li>");
var data = "test2";
$.when(first()).then(function() {
second(data);
}).then(function() {
third("test2");
}).then(function() {
$('ul').append("<li>Group 1 ended</li>");
deferred.resolve();
});
return deferred.promise();
}
function GroupFunction2() {
$('ul').append("<li>Group 2 started</li>");
$('ul').append("<li>Group 2 ended</li>");
}
$(function() {
$.when(GroupFunction1()).then(GroupFunction2);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul></ul>
누구든지 도움을받을 수 있습니까?
감사합니다.
OK, 나는) 다음 (에 귀하의 의견을 이해하지만, 나는 당신의 첫 번째 단락을하지 않았다 : 어떻게에서는 setTimeout의 콜백 함수의 약속을 반환? "return deferred.promise()"를 비동기 호출의 끝으로 이동하는 것은 나에게 의미가 없습니까?! 죄송합니다 ... –
@UweGrohne 'setTimeout'의 콜백에서 반환 할 필요가 없습니다. '.then()'의 콜백으로 리턴해야합니다. 'GroupFunction1' 함수에 대한 변경 사항을보십시오. 내 대답의 코드에는 내가 언급 한 모든 수정 사항이 있습니다. – JLRishe