programing

연기 대 약속

newstyles 2023. 10. 21. 10:04

연기 대 약속

jQuery 버전 이외에 Depended와 Promise의 차이점은 무엇입니까?

제가 필요할 때 무엇을 사용해야 합니까?나는 단지 전화하고 싶습니다.fooExecute(). 필요한 건 오직fooStart()그리고.fooEnd()예를 들어 html div 상태를 전환합니다.

//I'm using jQuery v2.0.0
function fooStart() { /* Start Notification */ }
function fooEnd() { /* End Notification */ }
function fooExecute() { /* Execute the scripts */ }

$('#button1').on('click', function() {
    var deferred1 = $.Deferred();
    var promise1 = $.Promise();

    deferred1.???

    promise1.???
});

첫번째: 사용할 수 없습니다.$.Promise();존재하지 않기 때문입니다.

지연 개체는 약속을 만들고 상태를 다음으로 변경할 수 있는 개체입니다.resolved아니면rejected. 지연은 일반적으로 자신의 함수를 작성하고 호출 코드에 약속을 제공하려는 경우에 사용됩니다.당신은 가치의 생산자입니다.

약속이란 이름에서 알 수 있듯이 미래의 가치에 대한 약속입니다.해당 값을 얻기 위해 콜백을 연결할 수 있습니다.그 약속은 당신에게 "주어진" 것이고 당신은 미래의 가치를 받는 사람입니다.
약속의 상태는 수정할 수 없습니다.약속을 만든 코드만이 상태를 바꿀 수 있습니다.

예:

1. (프로듀스) 자신의 기능에 대한 약속 지원을 제공하고자 할 때 지연된 개체를 사용합니다.값을 계산하고 약속이 해결될 때 제어하려고 합니다.

function callMe() {
    var d = new $.Deferred();
    setTimeout(function() {
        d.resolve('some_value_compute_asynchronously');
    }, 1000);
    return d.promise();
}

callMe().done(function(value) {
    alert(value);
});

2. (forward) 약속을 반환하는 함수를 호출하는 경우 자신의 지연 개체를 만들 필요가 없습니다.그 약속은 그냥 돌려주셔도 됩니다.이 경우 함수는 값을 생성하지 않고 전달합니다(종류).

function fetchData() {
    // do some configuration here and pass to `$.ajax`
    return $.ajax({...});
}

fetchData().done(function(response) {
    // ...
});

3. (수신) 때로는 약속/가치를 만들거나 전달하지 않고 직접 사용하고자 할 때가 있습니다. 즉, 어떤 정보의 수신자가 되는 것입니다.

$('#my_element').fadeOut().promise().done(function() {
    // called when animation is finished
});

물론, 이 모든 사용 사례도 혼합될 수 있습니다.당신의 함수는 (예를 들어, Ajax 호출로부터) 값의 수신기가 될 수 있고, 그것을 기반으로 다른 값을 계산(생산)할 수 있습니다.


관련 질문:

약속은 지연된 수집이 완료되면 실행되는 지연된 개체에 설정할 수 있는 것입니다.

jQuery 설명서의 예:

<!DOCTYPE html>
<html>
<head>
  <style>
div {
  height: 50px; width: 50px;
  float: left; margin-right: 10px;
  display: none; background-color: #090;
}
</style>
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<body>

<button>Go</button>
<p>Ready...</p>
<div></div>
<div></div>
<div></div>
<div></div>


<script>
$("button").on( "click", function() {
  $("p").append( "Started...");

  $("div").each(function( i ) {
    $( this ).fadeIn().fadeOut( 1000 * (i+1) );
  });

  $( "div" ).promise().done(function() {
    $( "p" ).append( " Finished! " );
  });
});
</script>

</body>
</html>

여기 JSFiddle에 있습니다.

이것은 각각의 기능을 실행합니다.div그리고 실행합니다..promise코드화할때.each실행이 완료되었습니다.

언급URL : https://stackoverflow.com/questions/17308172/deferred-versus-promise