Если вы хотите запретить слишком много вызовов функции и только exe c последний, используйте функцию debounce в качестве ответа @Dave Pastor.
const debounce = (fn, time) => {
let timeout;
return function() {
const functionCall = () => fn.apply(this, arguments);
clearTimeout(timeout);
timeout = setTimeout(functionCall, time);
}
}
let TIME_BETWEEN_CALLS = 500 // ms
// some event happen
// then call debounce
target.on("event", debounce(handleSearch, TIME_BETWEEN_CALLS));
Если вы хотите обрабатывать только При первом вызове вы можете создать для него глобальный флаг и проверить его флаг первым в функции:
let flag = false;
const handleSearch = async (queryName: string) => {
if (flag) return;
flag = true;
const result = await getQueryTeacheNameList({ teacher_name: queryName });
if (result.err_no === 0) {
const { teacher_list } = result;
if (Array.isArray(teacher_list)) {
setOptions(teacher_list as IBackendTeacher[]);
}
}
flag = false;
};
А если вы хотите обработать все вызовы, pu sh вызывает очередь и выполняет все oop в этой очереди.