연기 대 약속
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>
이것은 각각의 기능을 실행합니다.div
그리고 실행합니다..promise
코드화할때.each
실행이 완료되었습니다.
언급URL : https://stackoverflow.com/questions/17308172/deferred-versus-promise
'programing' 카테고리의 다른 글
swift(iOS)에서 라디오 버튼과 체크박스를 만드는 방법? (0) | 2023.10.21 |
---|---|
해결책을 검색한 후 워드프레스에서 All-in-One 마이그레이션을 읽을 수 있는 파일 (0) | 2023.10.21 |
클라이언트에서 포스트백 확인클릭 버튼 ASP.NET (0) | 2023.10.21 |
MaxUploadSize 처리 방법초과됨예외. (0) | 2023.10.21 |
Express 4.x에서 "./bin/www"의 기능은 무엇입니까? (0) | 2023.10.21 |