Javascript JS onclick,覆盖上一次单击

Javascript JS onclick,覆盖上一次单击,javascript,angularjs,dom-events,Javascript,Angularjs,Dom Events,我正在编写一个查询引擎,用户在其中输入参数,然后单击查询。 ng click事件最多可能需要7-10秒,但渲染第1页所需的时间不到一秒。如果用户希望在该时间结束之前重新提交一个新查询,则会有一点延迟,因为我相信原始函数调用仍在返回 有没有办法突然停止以前的函数调用,而只调用最近的函数 下面是查询函数和来自HTML的调用 $scope.query = function(name, matchMode, domain) { name = name.trim(); $s

我正在编写一个查询引擎,用户在其中输入参数,然后单击查询。 ng click事件最多可能需要7-10秒,但渲染第1页所需的时间不到一秒。如果用户希望在该时间结束之前重新提交一个新查询,则会有一点延迟,因为我相信原始函数调用仍在返回

有没有办法突然停止以前的函数调用,而只调用最近的函数

下面是查询函数和来自HTML的调用

$scope.query = function(name, matchMode, domain) {
        name = name.trim();
        $scope.pageNumber = 0;
        start = 0
        end = $scope.perPage;
        $http.get(ROOT_API+"query/asset/"+name+"/"+matchMode+"/"+domain).success(
            function(data){
                $scope.results=data;
                $scope.displayResults=$scope.results.slice(start,end);
                $scope.totalResults=data.length;
                $scope.totalPages=Math.floor($scope.totalResults / $scope.perPage);
                setPageValues($scope.displayResults)
            });

        setTimeout(function() {
            $scope.displayResults.concat(setPageValues($scope.results.slice(end,$scope.totalResults)))
        },2000);

    }

也许您可以将整个过程包装在一个do..while循环中,并将一些exit变量设置为true?

您的代码已进入多线程, 第一个线程已分配给click函数中的代码,第二个线程分配给http get请求。所以第一个线程被执行,因为它忽略了下一个线程的执行。 因此,在javascript中,我们有回调函数来处理异步调用。 在回调中记录API调用响应,而不是使用setTimeout函数

    let apicallFun = function(requestObj, Callback){
       console.log("Inside API call");
       return $http.get('/your_URL', requestObj)
      .then(function(response){
         Callback(response);
      })
    }
然后在您的click函数中,将此apicallFun称为:


这似乎更像是一个评论,而不是一个答案。如果这是一个答案,请提供示例代码。这是否回答了您的问题@塔普拉,我不想因为超时而取消。我想基于另一个单击事件取消。超时没有文字超时。超时被给予延迟/承诺。由您选择何时解决它。您能详细说明一下在回调中记录API调用响应是什么意思吗?那太棒了
    let apicallFun = function(requestObj, Callback){
       console.log("Inside API call");
       return $http.get('/your_URL', requestObj)
      .then(function(response){
         Callback(response);
      })
    }
$scope.clickFun = function(requestObj){
    apicallFun(requestObj, function(response){
       //according to your response object write the rest of your code.
    }
}