지연된 콜백의 작동 방식은 콜백을 추가 할 때마다 해당 콜백이 배열로 푸시됩니다. 그런 다음 지연된 객체 에서 .resolve()
or .resolveWith()
메소드를 호출 .done()
하면 배열의 모든 콜백이 순서대로 실행됩니다.
이제 Deferred Object가 무엇인지 살펴볼 수 있습니다. 아래의 스 니펫을 예로 들어 보겠습니다.
var deferred = $.Deferred();
var promise = deferred.promise();
우리가 지금 가지고있는 것은 연기 된 대상과 약속 된 대상입니다. 지연된 객체 그러나 약속 오브젝트 만의 방법을 가지고, 모두에게 약속 객체와 동일한 방법을 가지고 .done()
, .fail()
그리고 .always()
이는 각각의 지연에 대한 콜백 객체를 추가하기 위해 사용된다 event
. 반면에 지연된 객체에는 몇 가지 다른 방법이 있습니다. 가장 중요한 것은 .resolve()
및 .reject()
입니다. 이 메소드가 지연된 객체에서 호출되면 모든 콜백이 호출됩니다. .resolve()
가 터 .done()
와 .always()
그동안 콜백 .reject()
메소드 호출 .fail()
및 .always()
콜백.
일반적으로 지연된 오브젝트는 개인용 범위 내에 숨겨져 있으며, 약속 오브젝트는 함수에서 리턴되어 콜백을 배치 할 수 있습니다. 지연된 객체는 나중에 ajax 요청이 완료된 후 또는 이미지가로드 된 후, setTimeout 등으로 해결됩니다. 지연된 객체는 한 번만 해결 될 수 있음을 인식해야합니다. 이미 해결 된 경우 콜백이 즉시 호출됩니다.
다음은 내가 사용하는 또 다른 예입니다.
function loadImage(url) {
var def = $.Deferred(),
img = new Image();
$(img).on("load error",function(e){
if (e.type === "error") {
def.reject(url);
}
else {
def.resolve(url);
}
});
img.src = url;
// return the promise object so that callbacks can
// be defined on the deferred object.
return def.promise();
}
loadImage("foobar.jpg").done(function(){
alert("The image is loaded!");
}).fail(function(){
alert("The image failed to load!");
}).always(function(){
alert("This is always called!");
});
jQuery의 $.Deferred()
메소드 및 지연된 객체 에 대한 자세한 내용 은 http://api.jquery.com/category/deferred-object/를 방문하십시오.
Deferred
객체 를 의미 합니까? 이것이 Node.js에 특정한 것입니까?