Javascript多次调用相同的函数,仅在最后一次函数调用时发出警报

时间:2018-03-26 21:36:10

标签: javascript jquery callback alert

我有一个函数,可以在按钮单击事件中连续多次调用回调。在我的回调中,如果满足条件,它会向用户发送警报(bool为false)。我只想在最后一次函数调用时发送此警报,因此它不会提醒用户五次。基本上,如果函数被调用5次,我会过滤前4个警报。我必须保持这个设置,因为我实现该函数的方式使用户可以轻松地输入参数以根据其输入参数(php_script_to_call,key_user_is_intersted_in,index_to_put_into_table)获取特定的JSON键值,并且所有这些当前正在工作,我是获得所需的JSON密钥。

var boolean = false;
var exeCount = 0;
function exeCtCoreAPI(api, key, index, callback) {
    exeCount++;
    $.ajax({ // filter data, gets the desired JSON key here, and sends it to the callback with three parameters }); 
}


function exeCtCoreAPIcallback(result, index, boolean){
if (boolean){
    $('#data-table tbody tr').eq(0).find('td').eq(index).text(result);
} else { 
    alert("Something went wrong! Certain data might not populate");  //only want to display this popup once, on the last function call
    $('#data-table tbody tr').eq(0).find('td').eq(index).text(result);
}

}


//This is how I call my function
       //php script   //key    //index   //callback
exeAPI("getdata.php", "JSONkey0", 0, exeAPIcallback); 
exeAPI("getdata.php", "JSONkey1", 1, exeAPIcallback); 
exeAPI("getdata.php", "JSONkey2", 2, exeAPIcallback); 
exeAPI("getdata.php", "JSONkey3", 3, exeAPIcallback); 
exeAPI("getdata.php", "JSONkey4", 4, exeAPIcallback); 
exeAPI("getdata.php", "JSONkey5", 5, exeAPIcallback); 

这是我的逻辑:

我添加了一个布尔值和一个计数器(exeCount),我想我需要这些来过滤警报。基本上,当触发按钮单击事件时,exeCount将是调用函数的次数。然后我过滤掉前几个警报并显示最后一个警报。我只是很难实现这个逻辑。你们觉得怎么样?

1 个答案:

答案 0 :(得分:0)

使用去抖功能。看看这个:

https://davidwalsh.name/javascript-debounce-function

function debounce(func, wait, immediate) {
  var timeout;
  return function() {
    var context = this, args = arguments;
    var later = function() {
        timeout = null;
        if (!immediate) func.apply(context, args);
    };
    var callNow = immediate && !timeout;
    clearTimeout(timeout);
    timeout = setTimeout(later, wait);
    if (callNow) func.apply(context, args);
  };
};

var myDebouncedFunction = debounce(exeApi("getdata.php","JSONkey0",0, exeAPIcallback, 100);