jQuery.Deferred() 메서드
4745 단어 프런트엔드 지식
팁:
4
구문 $.Deferred( [beforeStart ] )
$.ajax('data/url')
.done(function(response, statusText, jqXHR){
console.log(statusText);
})
.fail(function(jqXHR, statusText, error){
console.log(statusText);
})
,always(function(){
console.log('I will always done.');
});
1.done,fail,progress는 모두 리셋 목록에 리셋을 추가합니다. jQuery의Deferred 내부에서 $를 사용했기 때문입니다.Callbacks 대상과memory 표시가 추가되었습니다(자세한 내용은 제 글 jQuery 1.9.1 원본 분석 – Callbacks 대상을 보십시오).
그래서 만약에 우리가 처음으로 해당하는 리셋 목록의 리셋을 촉발했다면 리셋 목록에 리셋을 추가하면 리셋 목록에 리셋을 추가하면 바로 리셋 목록을 촉발할 것이다.
즉done,fail,progress 이런 방법을 사용했기 때문에 우리가 수동으로 터치할 필요가 없다.jQuery의ajax는 요청이 완료되면 해당하는 리셋 목록을 터치합니다.그래서 우리 뒤에 있는 체인 조작의 등록 리셋은 리셋 목록을 터치해서 추가되었을 수도 있고, 따라서 바로 실행될 것이다.
2.always 방법은 성공하든 실패하든 이 리셋을 실행한다.
3. then 메서드는 새 Deferred 객체를 반환합니다.
4
4
4
4
4
4
$.ajax({
url: 't2.html',
dataType: 'html',
data: {
d: 4
}
}).then(function(){
console.log('success');
},function(){
console.log('failed');
}).then(function(){
console.log('second');
return $.ajax({
url: 'jquery-1.9.1.js',
dataType: 'script'
});
}, function(){
console.log('second f');
return $.ajax({
url: 'jquery-1.9.1.js',
dataType: 'script'
});
}).then(function(){
console.log('success2');
},function(){
console.log('failed2');
});
위 코드, 만약 첫 번째 대 t2.html의 요청이 성공적으로 success를 출력하면second의ajax 요청을 실행합니다. 이어서 이 요청이 성공했는지 실패했는지에 대해success2 또는failed2를 실행합니다.첫 번째failed를 출력하지 못하고second f의ajax 요청을 실행합니다. (위와 다르다는 것을 주의하십시오.) 이 요청이 성공했는지 실패했는지 success2 또는failed2를 실행합니다.이런 것들을 이해하는 것은 실패 처리에 매우 중요하다.위에서 서열화된 비동기 조작 코드를 then 방법으로 개조한 후 코드는 즉시 편평해지고 가독성도 강화되었다.
var req1 = $.get('api1/data');
var req2 = $.get('api2/data');
var req3 = $.get('api3/data');
req1.then(function(req1Data){
return req2.done(otherFunc);
}).then(function(req2Data){
return req3.done(otherFunc2);
}).then(function(req3Data){
doneSomethingWithReq3();
});
4. 이어서 $를 소개한다.when의 방법은 주로 여러 개의 deferred 대상을 병행화하는 것이다. 모든 deferred 대상이 해결되면 뒤에 추가된 상응하는 리셋을 실행한다.
$.when(
$.ajax({
url: 't2.html'
}),
$.ajax({
url: 'jquery-1.9.1-study.js'
})
).then(function(FirstAjaxSuccessCallbackArgs, SecondAjaxSuccessCallbackArgs){
console.log('success');
}, function(){
console.log('failed');
});
만약 실패하면 모두 실패한 리셋을 실행할 것이다.위의 병렬 작업 코드를 개선하면 다음을 수행할 수 있습니다.
$.when(
$.get('api1/data'),
$.get('api2/data'),
$.get('api3/data'),
{ key: 'value' }
).done();
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
섀도우1.1 섀도우 css3에서 음영은 두 가지로 나뉘는데 하나는 상자 음영이고 하나는 문자 음영이다 2.1 박스 섀도우 박스-shadow 2.2 문법 1 box-shadow: 수평 편향 수직 편향 모호값 외연값 색상 내...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.