在每次实际的ajax调用之前进行另一次ajax调用以获取头文件 - jquery

时间:2017-05-29 07:16:57

标签: javascript jquery ajax authentication promise

我必须进行异步调用,使用cookie来获取必须传递的承载令牌,以便对资源进行实际的ajax调用。 我写了下面的代码,它很棒,让我得到结果。

我可以使用 ajaxPrefilter beforeSend 选项来获取令牌,我试图找到ajaxPrefilter的文档,它说它接受了一个函数,但它是否会等待该函数在打电话之前完成?

令牌检索功能

function getTokenUsingCookieAsync() {
        return new Promise(function (resolve, reject) {
            $.ajax('/retrieve-token').done(function (result) {
                resolve(result.token);
            }).fail(function (message) {
                reject(message);
            });
        });
    }

实际执行功能:

function execute(url, method, data) {
    var deferred = $.Deferred();
    getTokenUsingCookieAsync().then(function (response) {
        var reqSettings = {
            async: true,
            url: url,
            cache: false,
            type: method,
            headers: {
                Authorization: 'Bearer '+ response,
            },
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            data: data ? JSON.stringify(data) : null
        };
        $.ajax(reqSettings).done(function (result) {
            deferred.resolve(result);
        }).fail(function (message) {
            deferred.reject(message);
        });
    }).catch(function (message) {
        deferred.reject(message);
    });

    return deferred.promise();
}

那么以下伪代码是否可能?

$.ajaxPrefilter((options) => {
            $.ajax('/retrieve-token').done((result) => {
                options.headers =  {
                Authorization: `Bearer ${result}`
              };
         });
    });

 $.ajax('actual-url')
    .done(whatever);

0 个答案:

没有答案