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