Javascript 在每次实际的ajax调用之前进行另一个ajax调用以获取标题-jquery

Javascript 在每次实际的ajax调用之前进行另一个ajax调用以获取标题-jquery,javascript,jquery,ajax,authentication,promise,Javascript,Jquery,Ajax,Authentication,Promise,我必须进行一个异步调用,该调用使用cookie来获取承载令牌,必须传递该令牌才能对资源进行实际的ajax调用。 我已经写了下面的代码,非常好用,结果是这样的 我可以使用ajaxPrefilter或beforeSend选项来获取代币吗?我试图找到ajaxPrefilter的文档,其中说明它接受一个函数,但这是否会在进行实际调用之前等待该函数完成 令牌检索功能 function getTokenUsingCookieAsync() { return new Promise(funct

我必须进行一个异步调用,该调用使用cookie来获取承载令牌,必须传递该令牌才能对资源进行实际的ajax调用。 我已经写了下面的代码,非常好用,结果是这样的

我可以使用ajaxPrefilterbeforeSend选项来获取代币吗?我试图找到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);

我认为您不能随心所欲,因为prefilter和/或beforeSend预期是同步的-或者,至少这些函数中异步代码的任何结果对于requestPromise构造函数和延迟反模式都不可用-您的代码可以更干净-请参阅