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

问题描述 投票:0回答:1

我正在尝试创建一个名为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请求?有没有更好的方法可以实现我想要做的事情?

javascript jquery ajax jquery-deferred
1个回答
1
投票

使用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

© www.soinside.com 2019 - 2024. All rights reserved.