Javascript 在每次实际的ajax调用之前进行另一个ajax调用以获取标题-jquery
我必须进行一个异步调用,该调用使用cookie来获取承载令牌,必须传递该令牌才能对资源进行实际的ajax调用。 我已经写了下面的代码,非常好用,结果是这样的 我可以使用ajaxPrefilter或beforeSend选项来获取代币吗?我试图找到ajaxPrefilter的文档,其中说明它接受一个函数,但这是否会在进行实际调用之前等待该函数完成 令牌检索功能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
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构造函数和延迟反模式都不可用-您的代码可以更干净-请参阅