Javascript 将延迟处理程序附加到函数外部的嵌套AJAX调用
我正在尝试创建一个名为getApi的AJAX方法扩展,它将自动将我的承载令牌添加到请求头中 我有一个名为getToken的延迟函数,它从sessionStorage或端点(如果令牌已过期)返回令牌 我的扩展方法如下所示:Javascript 将延迟处理程序附加到函数外部的嵌套AJAX调用,javascript,jquery,ajax,jquery-deferred,Javascript,Jquery,Ajax,Jquery Deferred,我正在尝试创建一个名为getApi的AJAX方法扩展,它将自动将我的承载令牌添加到请求头中 我有一个名为getToken的延迟函数,它从sessionStorage或端点(如果令牌已过期)返回令牌 我的扩展方法如下所示: $.getApi = function (options) { getToken() .done(function (token) { options.headers = { Authorizati
$.getApi = function (options) {
getToken()
.done(function (token) {
options.headers = {
Authorization: token
};
$.get(options);
});
};
$.getApi({
url: "my endpoint" // Returns json
})
.done(function (data) {
// Do stuff with the json data
});
我希望能够将一个done处理程序附加到内部get请求,如下所示:
$.getApi = function (options) {
getToken()
.done(function (token) {
options.headers = {
Authorization: token
};
$.get(options);
});
};
$.getApi({
url: "my endpoint" // Returns json
})
.done(function (data) {
// Do stuff with the json data
});
如何更改getApi扩展方法,以便能够将处理程序附加到内部get请求?有没有更好的方法来实现我的目标?那么就使用promise界面吧。同时返回$.get,以便扩展承诺链:
$.getApi = function (options) {
return getToken().then(function (token) {
// ^^^^^^ ^^^^
options.headers = {
Authorization: token
};
return $.get(options);
// ^^^^^^
});
};
$.getApi({
url: "my endpoint"
}).then(function (data) {
// ^^^^
// ...etc
});
注意:没有充分的理由在jQuery对象上定义getApi。我建议把它变成一个全局函数:getApi。return getToken。然后……谢谢,我错过的是then,而不是done。Options是传递到getApi函数的ajax选项。啊,是的,Options就是这样。