我正在尝试创建一个名为getApi的AJAX方法扩展,它将自动将我的不记名令牌添加到请求标头中。
我有一个称为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请求?有没有更好的方法可以实现我想要做的事情?
使用Promise接口(then
)。还要return $.get()
,以便您扩展承诺链:
$.getApi = function (options) {
return getToken().then(function (token) {
// ^^^^^^ ^^^^
options.headers = {
Authorization: token
};
return $.get(options);
// ^^^^^^
});
};
$.getApi({
url: "my endpoint"
}).then(function (data) {
// ^^^^
// ...etc
});
NB:没有充分的理由在getApi
对象上定义jQuery
。我建议仅使其成为全局函数:getApi
。