deferred.promise( [target ] ) > 개발자팁

개발자팁

개발과 관련된 유용한 정보를 공유하세요.
질문은 QA에서 해주시기 바랍니다.

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개

전체 5,352
개발자팁 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT