将延迟处理程序附加到嵌套的 AJAX 调用外部函数

Attach deferred handlers to nested AJAX call outside function

我正在尝试创建一个名为 getApi 的 AJAX 方法扩展,它会自动将我的不记名令牌添加到请求 header。

我有一个名为 getToken() 的延迟函数,它 returns 来自 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 扩展方法以便能够将处理程序附加到内部获取请求?有没有更好的方法来实现我想要做的事情?

使用承诺接口 (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
});

注意:没有充分的理由在 jQuery 对象上定义 getApi。我建议将其设为全局函数:getApi.