jquery Deferred 객체 적용 인스턴스
2820 단어 deferred
1. 저는 두 개의 비동기 조작 f1과 f2가 있습니다. f2는 f1의 비동기 반환 결과에 의존해야 합니다. 리셋으로 쓰지 않으면 어떻게 합니까?
내가 원하는 모습을 먼저 생각해 보자.
//f3 f2
f1().pipe(f2).then(f3);
f1과 f2의 실현을 보면 간단하다.
var f1 = function(){
var _i = $.Deferred();
setTimeout(function(){
_i.resolve("f1 ");
},1000);
return _i;
}
var f2 = function(data){
var _i = $.Deferred();
console.log( data);
setTimeout(function(){
_i.resolve("f2 ");
},1000);
return _i;
}
var f3 = function( data ){
console.log( data );
}
2. 저는 f1과 f2 두 가지 조작을 하고 서로 의존하지 않지만 둘 다 완성한 후에 f3를 실행하기를 원합니다. 어떻게 합니까?
다음은 jquery 매뉴얼에서 직접 베끼기
$.when($.ajax("/page1.php"), $.ajax("/page2.php")).done(function(a1, a2){
//a1 a2 ajax
var jqXHR = a1[2]; /* arguments are [ "success", statusText, jqXHR ] */
if ( /Whip It/.test(jqXHR.responseText) ) {
alert("First page has 'Whip It' somewhere.");
}
});
3. deferred 대상은 재미있는 notify 대상도 있다.이 방법은 Resolve와reject에 이전에progress callback을 통지해서 해당하는 조작을 할 수 있습니다.