在我的情况下,如何进行http请求

How to make http request in my case

本文关键字:何进行 http 请求 我的 情况下      更新时间:2023-09-26

我正在努力防止在代码中触发多个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($http.pendingRequests.length===0) {
            return getData()
            .then(function(data) {
                //do stuff here
                return data;
            })     
        }
}
factory.getData = function() {
    return $http.get('/project/item');
}
return factory;

如果进程正在进行,上述代码将防止多次触发请求。但是,如果在承诺得到解决之前再次单击该按钮,则会得到Cannot read property of .then of 'undefined'。我知道这是因为$http请求没有返回任何内容,因为我有$http.pendingRequests.length===0条件。上面的代码给了我所需要的,但我不知道如何防止控制台日志中的错误。有人能帮我吗?非常感谢!

如果当前请求promise存在,下面将返回它,否则它将创建一个新请求并返回该promise。它将在成功时清除当前请求。

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;