Javascript 返回模块设置数据的Ajax请求

Javascript 返回模块设置数据的Ajax请求,javascript,Javascript,我已经研究了各种各样的问题,讨论了何时同步请求,如何从Ajax请求返回数据(包括承诺和回调),但似乎没有什么能回答我的问题 var FacadeApi = ( function($) { var endpoint = '/auth/', self = this, settings = { isAuthenticated: false, authkey: null }; function init() {

我已经研究了各种各样的问题,讨论了何时同步请求,如何从Ajax请求返回数据(包括承诺和回调),但似乎没有什么能回答我的问题

var FacadeApi = ( function($) {

    var endpoint = '/auth/',
        self = this,
        settings = {
        isAuthenticated: false,
        authkey: null
    };

    function init() {

        $.ajax( {
            url: self.endpoint,
            dataType: 'json',
            async: true
        })
        .done( function( `enter code here`data ) {
            self.settings.authKey = data.authKey;

            self.settings.isAuthenticated = true;
        })
        .fail( function( error ) {

        });
    }

    var Facade = {

        someRequest: function( ) {

            $.ajax( {
                url: someUri,
                dataType: 'json',
                data: { authKey: authKey }
            })
            .done( fuction( data ) {
                // does stuff.
            });
        }

    };

    init();

    return Facade;
}( jQuery ));
我的模块依赖于请求身份验证密钥,然后将其作为每个请求的一部分。在解决此请求之前,无法使用它。这使我找到了init函数中的async:false


在这种情况下,是否建议在init调用完成之前进行“阻塞”?我能否实现我所追求的目标并保持init请求异步

如果我理解正确

您希望确保,如果有人调用somerequest(),它应该等到您拥有令牌,令牌将在单独的请求中启动

我建议采用以下模式

不要从头调用init()

当您需要调用somerequest()时

检查您是否具有有效的令牌值


如果没有令牌值,则可以使用$.When(),这样只有在init()ajax调用成功返回时才会调用somerequest()。

同步请求(至少是非工作请求),并且一些浏览器在遇到这些请求时会在控制台中发出警告(并且可能会在某些未确定的点上引发异常)-我会不惜一切代价避免它们。我会建议实现一个队列,因此
someRequest
中的请求必须等待authKey出现,然后才能执行。