문제

사용자가 특정 버튼을 클릭하면 몇 가지 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().

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top