deferred.promise( [target ] ) 정보
jQuery deferred.promise( [target ] )본문
deferred.promise( [target ] )
설명 : 지연된 Promise 객체를 반환합니다.
이 deferred.promise()메서드는 비동기 함수로 인해 다른 코드가 내부 요청의 진행 또는 상태를 방해하지 못하도록합니다. 약속은 단지 연기 된 상태 (추가 핸들러를 첨부하거나 결정하는 데 필요한 방법 공개 then, done, fail, always, pipe, progress, state등을 promise),하지만 상태를 (변경 것들 resolve, reject, notify, resolveWith, rejectWith, 및 notifyWith).
If target가 제공되면 deferred.promise()메서드를 메서드에 연결 한 다음 새 메서드를 만드는 대신이 개체를 반환합니다. 이미 존재하는 개체에 약속 동작을 첨부하는 것이 유용 할 수 있습니다.
Deferred를 만드는 경우 Deferred에 대한 참조를 유지하여 어느 시점에서 해결되거나 거부 될 수 있도록합니다. Promise 객체 만 반환 deferred.promise()하면 다른 코드가 콜백을 등록하거나 현재 상태를 검사 할 수 있습니다.
자세한 내용은 지연 객체에 대한 설명서를 참조하십시오 .
예 :
Deferred를 만들고 두 개의 타이머 기반 함수를 설정하여 무작위 간격 후에 Deferred를 확인하거나 거부합니다. 어느 것이 든 먼저 불이 든다면 "이기고"콜백 중 하나를 부를 것이다. 첫 번째 타임 아웃 작업에서 Deferred가 이미 완료 되었기 때문에 (해결되거나 거부 된 상태에서) 두 번째 타임 아웃은 아무 효과가 없습니다. 또한 타이머 기반 진행 통지 함수를 설정하고 문서 본문에 "working ..."을 추가하는 진행 핸들러를 호출하십시오.
function asyncEvent() {
var dfd = jQuery.Deferred();
// Resolve after a random interval
setTimeout(function() {
dfd.resolve( "hurray" );
}, Math.floor( 400 + Math.random() * 2000 ) );
// Reject after a random interval
setTimeout(function() {
dfd.reject( "sorry" );
}, Math.floor( 400 + Math.random() * 2000 ) );
// Show a "working..." message every half-second
setTimeout(function working() {
if ( dfd.state() === "pending" ) {
dfd.notify( "working... " );
setTimeout( working, 500 );
}
}, 1 );
// Return the Promise so caller can't change the Deferred
return dfd.promise();
}
// Attach a done, fail, and progress handler for the asyncEvent
$.when( asyncEvent() ).then(
function( status ) {
alert( status + ", things are going well" );
},
function( status ) {
alert( status + ", you fail this time" );
},
function( status ) {
$( "body" ).append( status );
}
);
target 인수를 사용하여 기존 객체를 Promise로 승격 시키십시오.
// Existing object
var obj = {
hello: function( name ) {
alert( "Hello " + name );
}
},
// Create a Deferred
defer = $.Deferred();
// Set object as a promise
defer.promise( obj );
// Resolve the deferred
defer.resolve( "John" );
// Use the object as a Promise
obj.done(function( name ) {
obj.hello( name ); // Will alert "Hello John"
}).hello( "Karl" ); // Will alert "Hello Karl"
0
댓글 0개