prosource

빈 약속 반환

probook 2023. 10. 10. 20:38
반응형

빈 약속 반환

jQuery 약속을 돌려주는 기능이 있습니다.다음과 같습니다.

addBooks(books: Array<Books>) {
    return $.ajax({
        url: '/Books/AddBooks/',
        type: 'POST',
        data: ko.toJSON(books),
        contentType: 'application/json'
    });
}

이 기능을 다시 사용하고 다음과 같은 약속 콜백을 연결할 수 있습니다.

addBooks.done(() => { alert("Books added!"); })

제 질문은, 제가 addBooks를 조기에 이탈하여 서버로의 이동을 막으려면 어떻게 해야 할까 하는 것입니다.예를 들어,

addBooks(books: Array<Books>) {

    // An empty array was passed in for some reason.
    // Theres nothing to add so dont try to POST
    if (books <= 0) return null;

    return $.ajax({
        url: '/Books/AddBooks/',
        type: 'POST',
        data: ko.toJSON(books),
        contentType: 'application/json'
    });
}

나의 예는 내 체인으로 완료된 콜백 예가 다음을 예상하기 때문에 컴파일되지 않습니다.addBooksnull이 아닌 약속 개체를 반환합니다.빈 약속(또는 상황에서 반환해야 할 올바른 대상이 무엇이든)을 반환하려면 어떻게 해야 합니까?

빈 약속(또는 상황에서 반환해야 할 올바른 대상이 무엇이든)을 반환하려면 어떻게 해야 합니까?

네, 아무것도 없이 이미 이루어진 약속을 의미한다면 여기서 "공허한 약속"이 적절합니다.undefined,null).

이를 만들기 위한 jQuery 구문은 다음과 같이 단일(또는 없음) 인수와 함께 사용됩니다.

if (books <= 0) return $.when(null);

결정된 약속을 반환할 수 있습니다.대신에

if (books <= 0) return null;

사용하다

if (books <= 0) return $.Deferred().resolve();

하지만, jQuery의 것을 조심하세요.PromiseAPI는 놀라운 일을 합니다.가끔은 당신을 부를 때도 있습니다.done/then/etc. 콜백은 에 동기화됩니다.done/then/etc. call, 가끔은 그렇지 않습니다.대부분의 약속 라이브러리는 통화 중에도 통화가 항상 비동기 상태임을 보장합니다.done/then결심한 약속으로 / 등.jQuery는 그렇지 않아서 미묘한 차이가 납니다.

예를 들어, 이 코드는 다음과 같습니다.

addBooks(() => console.log(1));
console.log(2);

...로그할 것입니다

21

...만약 당신이 아약스에게 전화를 했다면,

12

...만약 당신이 결심한 약속을 돌려준다면요.

출처: https://api.jquery.com/jquery.when/

당신이 어떤 논쟁도 통과시키지 않는다면,jQuery.when()결정된 약속을 반환합니다.

예.

if (books <= 0) return $.when();

정의되지 않은 값이 필요한 경우 다음을 전달합니다.

단일 인수가 jQuery로 전달되는 경우.()가 Depended 또는 Promise가 아닌 경우, Depended로 처리되며 첨부된 모든 DoneCallback은 즉시 실행됩니다.완료된 콜백은 원래 인수를 전달합니다.

예를 들어 빈 배열이 전달되는 경우:

if (books <= 0) return $.when([]);

예를 들어 빈 개체가 전달되는 경우:

if (books <= 0) return $.when({});

언급URL : https://stackoverflow.com/questions/30004503/return-an-empty-promise

반응형