아래의 비 기능적 예제는 내가하려고하는 것을 설명해야하며,이를 수행하는 데 필요한 패턴을 이해하지 못합니다. 인터넷 검색을 시도하여 폴링을 이해하고 지연 시켰지만 이해할 수있는 것을 찾을 수 없었습니다.
API를 폴링하는 기능이 있는데, 내 주요 기능을 계속하기 전에 해당 폴링이 예상 결과를 반환 할 때까지 기다렸다가 끝점이 변경되었다는 표시를 기다리고 싶습니다. 내가 도대체 뭘 잘못하고있는 겁니까?
편집 : 제가 코드를 잘못 것 그 무엇을 추가해야합니다 아래, 비록 deferred.resolve()
결국 호출되는 것입니다 그것은 반환있어 같은 deferred
아니므로 when
이 main()
활성화 결코 극복 보인다. 나는 그것이 시간 초과와 관련이 있다는 것을 짐작하고있다. 의미는 deferred
첫 반복에서 clobbered를 의미한다. 그것은 어쨌든 내 가정입니다.
function pollAPI() {
var deferred = $.Deferred();
$.ajax({
url: url,
contentType: 'application/JSON',
method: 'GET'
}).done(function(data){
if (!desiredResult) {
setTimeout(function() {
pollAPI();
}, 1000);
} else {
deferred.resolve();
}
}).error(deferred.reject());
return deferred.promise();
}
function main() {
$.when(pollAPI()).then(function() {
// do something now that the API has returned the expected result
});
pollAPI 호출 할 때마다 사방됩니다 새로운 연기, 아무것도 생성하지 - deferred.resolve (pollAPI())'시도'에서는 setTimeout –
같으면 '에서을 첫 번째 연기가 해결되도록하는 원인이되어 준비가되지 않았지만 'when'을 트리거 할 수 있습니까? – fildred13
예, 아직 해결되지 않은 약속으로 해결 될 것이므로 문제가되지 않아야합니다. [Promise/A + 사양] (https://promisesaplus.com/)의 2.3 절을 참조하십시오. jquery가이 사양을 따르기도하지만 거기 이전 jQuery 버전의 Promise/A + 스펙에서 크게 벗어났다. –