Javascript 在我的案例中如何发出http请求
我试图防止在我的代码中触发多个http请求 我有点像 在我的控制器中Javascript 在我的案例中如何发出http请求,javascript,angularjs,xmlhttprequest,Javascript,Angularjs,Xmlhttprequest,我试图防止在我的代码中触发多个http请求 我有点像 在我的控制器中 //if use click, fire this method var getItems = function() { factory.makeRequest.then(function(data){ //do stuff with data... }) } 在我的工厂里 var factory = {}; factory.makeRequest = function(){ if($
//if use click, fire this method
var getItems = function() {
factory.makeRequest.then(function(data){
//do stuff with data...
})
}
在我的工厂里
var factory = {};
factory.makeRequest = function(){
if($http.pendingRequests.length===0) {
return getData()
.then(function(data) {
//do stuff here
return data;
})
}
}
factory.getData = function() {
return $http.get('/project/item');
}
return factory;
如果进程正在进行,上述代码将防止多次触发请求。但是,如果在承诺得到解决之前再次单击按钮,我将获得
无法读取的属性。然后是'undefined'
。我知道这是因为$http
请求没有返回任何内容,因为我有$http.pendingRequests.length==0
条件。上面的代码提供了我所需要的,但我不知道如何防止控制台日志中的错误。有人能帮我吗?非常感谢 以下命令将返回当前请求承诺(如果存在),否则将创建新请求并返回该承诺。它将在成功时清除当前请求
var factory = {};
factory._currentRequest = null;
factory.makeRequest = function(){
if(!factory._currentRequest) {
factory._currentRequest = factory.getData()
.then(function(data) {
//do stuff here
factory._currentRequest = null;
return data;
})
}
return factory._currentRequest
}
factory.getData = function() {
return $http.get('/project/item');
}
return factory;
所以你要检查$http.pendingRequests==未定义?@ABOS是的。我需要知道http请求何时进入进程。谢谢,但这不会阻止多次触发请求。这取决于您的意思,当当前http请求正在进行时,它不应该触发另一个http请求,这是我假设您需要的。它只会为同样的持续请求提供承诺。如果你需要它做其他事情,你能澄清这个问题吗?我的错,因为它不会发出新的请求,factory.makeRequest.then(函数(数据)将给我一个错误,即无法读取未定义的属性'then'。我提供的代码应始终返回一个承诺对象。如果为null,它将创建一个新的承诺对象,否则它将为正在进行的请求提供一个承诺对象。