Прикрепить отложенные обработчики к вложенной AJAX функции вызова извне - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь создать расширение метода AJAX с именем getApi, которое автоматически добавит мой токен-носитель в заголовок запроса.

У меня есть отложенная функция с именем getToken(), которая возвращает токен из sessionStorage или из конечной точки, если срок ее действия истек.

Мой метод расширения выглядит следующим образом:

$.getApi = function (options) {
    getToken()
        .done(function (token) {
            options.headers = {
                Authorization: token
            };

            $.get(options);
        });
};

И я хочу иметь возможность подключить обработчик done () к внутреннему запросу get Пример:

$.getApi({
    url: "my endpoint" // Returns json
})
    .done(function (data) {
        // Do stuff with the json data
    });

Как изменить метод расширения getApi, чтобы можно было подключать обработчики к внутреннему запросу get? Есть ли лучший способ добиться того, что я пытаюсь сделать?

1 Ответ

1 голос
/ 29 января 2020

Использовать интерфейс обещания (then). Также возврат $.get(), поэтому вы расширяете цепочку обещаний:

$.getApi = function (options) {
    return getToken().then(function (token) {
 // ^^^^^^            ^^^^  
        options.headers = {
            Authorization: token
        };
        return $.get(options);
 //     ^^^^^^
    });
};

$.getApi({
    url: "my endpoint"
}).then(function (data) {
// ^^^^
    // ...etc
});

Примечание: нет веских оснований для определения getApi для объекта jQuery. Я бы посоветовал просто сделать его глобальной функцией: getApi.

...