대기하지 않을 때/그 때(때/완료할 때) jquery
저는 이 구문을 사용하는 많은 샘플을 살펴보았지만 제가 무엇을 잘못하고 있는지 알 수 없습니다.아약스 호출이 반환되기 전에 "그때" 함수가 실행되고 있습니다.
저는 $.delered와 몇 가지 다른 패턴도 사용해봤지만 소용이 없었습니다.
누가 제가 뭘 놓쳤는지 볼 수 있을까요?
디버그를 해봤더니 완료/완료된 내부에서 걸려온 호출이 Ajax 호출의 성공(또는 오류) 데이터를 반환하기 전에 확인됩니다.
도와주셔서 감사합니다.
기본 통화:
this.addFirstTask = function(task) {
var totalHours = GetHours();
$.when(totalHours).done(function (data) {
task.TaskHours(data);
self.add(task);
});
};
다음과 같은 아약스 함수를 호출합니다.
function GetHours() {
$.ajax({
url: "/api/tst/GetMyData",
type: 'GET',
dataType: 'json',
success: function(data) {
return data;
},
error: function(data) {
return 0;
}
});
};
감사합니다!
사후 처리:
추가 조언에 따라 Ajax 호출에 반환을 추가하는 것 외에도, Ajax 호출에서 성공과 오류를 제거하고 addFirstTask를 다음과 같이 변경했습니다.
this.addFirstTask = function(task) {
var totalHours = GetHours();
$.when(totalHours)
.then(function (data) {task.TaskHours(data);})
.done(function () { self.add(task); });
};
GetHours가 성공하면 TaskHours 값을 업데이트합니다.실패하면 그냥 건너뜁니다.'DONE'은 에서 'FINIEL'과 같다는 것을 깨달았습니다.NET의 시도/획득.따라서 작업을 즉시 추가한 다음 값이 반환될 때 내 관측 가능한 바인딩이 업데이트하도록 하는 대신 self.add도 비동기 호출의 일부입니다.
function GetHours() {
return $.ajax({
...
});
};
$.ajax()가 Promise를 반환합니다.$.() Promise 컬렉션을 가져오고 모든 입력 약속이 완료될 때 완료되는 Promise를 반환할 때 .then()은 Promise의 메서드(이 경우, () 생성될 때 래퍼 Promise는 약속이 성공적으로 해결될 때 첫 번째 함수 arg를 호출합니다.
따라서 GetHours는 () 언제 끝날 수 있는지에 대한 약속을 반환해야 하며 ()를 호출하면 실제로 when() 부분을 건너뛰고 GetHours에서 돌아올 때 .를 호출할 수 있습니다.
오류가 발생하지 않는 이유는 .() 이전 개체도 가져가고 Promise 인터페이스를 구현하지 않으면 이미 완료된 Promise처럼 처리하기 때문입니다.
이것은 OPs 문제가 아니지만, 저도 비슷한 일이 있었습니다. 제가 일련의 약속을 전달함으로써 $.when(...)을 잘못 불렀기 때문입니다.
jQuery에 대한 설명서에 따릅니다.여러 개의 지연된 개체를 기다리려면 다음과 같이 호출해야 합니다.
$.when( d1, d2 ).then(....);
즉, 배열에 지연된 개체가 여러 개 있는 경우 apply(...)를 사용해야 합니다. 그렇지 않으면 $.when이 제대로 작동하지 않습니다.따라서 지연된 객체 배열에 대한 호출은 다음과 같습니다.
$.when.apply(this, arrayOfDeferred).then(....);
다음은 JS 피들이 이를 시연하는 모습입니다.
https://jsfiddle.net/Lvo4hrez/11/
GetHours 함수에서 $.ajax 결과를 반환해야 합니다. 다음과 같습니다.
function GetHours() {
$.ajax({
url: "/api/tst/GetMyData",
type: 'GET',
dataType: 'json',
success: function(data) {
return data;
},
error: function(data) {
return 0;
}
});
};
언급URL : https://stackoverflow.com/questions/21974649/jquery-when-then-also-when-done-not-waiting
'programing' 카테고리의 다른 글
개인 도커 레지스트리에서 이미지를 삭제하는 방법은 무엇입니까? (0) | 2023.08.22 |
---|---|
jQuery/JavaScript 코드를 구성하는 가장 좋은 방법(2013) (0) | 2023.08.22 |
각 목록 항목 뒤에 이미지 삽입 (0) | 2023.08.22 |
도커 컴포지업을 사용해야 합니까, 아니면 실행해야 합니까? (0) | 2023.08.22 |
Pandas 모드='a', if_sheet_model='model'이(가) 작동하지 않습니다. (0) | 2023.08.22 |