AJAX를 사용하여 직접 Deferred 객체를 생성하고 사용할 수 있습니까?
-
21-12-2019 - |
문제
사용자가 특정 버튼을 클릭하면 몇 가지 AJAX 요청을 보내는 애플리케이션이 있습니다.
그러나 모든 요청을 중단해야 하는 '취소' 버튼과 유사한 버튼도 있습니다.
나는 사용하고있다 $.when
현재 전송된 모든 요청을 처리하기 위해 적절한 콜백이 추가되었습니다. Promise
반환하는 객체입니다.
그러나 사실은 $.when
반환합니다 Promise
객체는 메소드를 (의도적으로) 포함하지 않기 때문에 실망스럽습니다. Deferred
다음 코드와 같이 요청을 제어해야 합니다.
$.when 사용
var x = $.when($.get('/'), $.get('/')); // .then(function() {console.log('done');});
Object.keys(x);
// ["state", "always", "then", "promise", "pipe", "done", "fail", "progress"]
하나의 AJAX 요청 사용(jqXHR은 Deferred 인터페이스를 구현함)
var x = $.get('/');
Object.keys(x);
// ["readyState", "getResponseHeader", "getAllResponseHeaders", "setRequestHeader", "overrideMimeType", "statusCode", "abort", "state", "always", "then", "promise", "pipe", "done", "fail", "progress", "complete", "success", "error"]
복구할 방법을 찾고 있어요 Deferred
이의를 제기하거나 교체 $.when
동일한 작업을 수행하지만 Deferred
대신 개체.거기에서 적절한 거부/중단 방법을 호출할 수 있습니다.
이것이 가능한가?
해결책
요청을 배열에 넣고 필요할 때 개별적으로 중단할 수 있습니다.
이를 위해 다음을 사용할 수 있습니다. .apply
~에 $.when
.예를 들어:
var requests = [$.get('/'), $.get('/')];
$.when.apply($,requests).then(function(res1,res2){
//access results here
});
// aborting:
requests.forEach(function(x){ return x.abort();});
지연된 객체는 콜백 API에서 약속을 생성하는 데에만 사용됩니다.이미 존재하는 Promise의 지연된 객체를 '검색'할 수 없습니다.그것을 사용하여 새로운 것을 만드십시오.
Domenic's를 살펴보는 것도 좋습니다. last()
.
제휴하지 않습니다 StackOverflow