答案是不能,因为 `_.throttle` 并不关心执行结果,也不提供介入调度过程的参数,要想实现那样的效果,只能在原函数上面下功夫,不如另起炉灶。 /** * @param {(...args: any[]) => Promise} fn 被节流的函数 * @param {number} [duration] 节流间隔 * @param {Function} [resolver] 用于接收函数执行结果的回调函数 * @param {Function} [rejector] 用于处理失败请求的回调函数 * @return {() => void} 返回一个函数,执行该函数即可终止节流函数继续进行 */ function asyncThrottle( fn, duration = 1e3, resolver = () => {}, rejector = () => {} ){ let timer = Number.MIN_VALUE; let keepGoing = true; return function(...args){ const trigger = () => { fn.call(this,...args).then((res) => { if(keepGoing){ timer = setTimeout(trigger); } resolve(res); }).catch(err => { if(keepGoing){ timer = setTimeout(trigger); } }); } trigger(); return () => { clearTimeout(timer); keepGoing = false; }; } }