Javascript 如果计时器超过一定数量,如何覆盖setTimeout以提供堆栈跟踪?

Javascript 如果计时器超过一定数量,如何覆盖setTimeout以提供堆栈跟踪?,javascript,typescript,expo,Javascript,Typescript,Expo,世博会上出现了一条警告 在Android上,设置一个长时间的计时器(即多分钟)是一个性能和正确性问题,因为它会使计时器模块处于唤醒状态,并且计时器只能在应用程序位于前台时调用。有关更多信息,请参阅。 (Saw设置超时,持续时间为3601013ms) 我不介意尝试尽可能多地解决警告,但它提供的堆栈跟踪没有说明调用setTimeout的位置,这使得很难确定哪个模块正在执行此操作,因为我假定调用setTimeout的是一个外部模块 在TypeScript中,有没有一种方法可以替代setTimeout来

世博会上出现了一条警告

在Android上,设置一个长时间的计时器(即多分钟)是一个性能和正确性问题,因为它会使计时器模块处于唤醒状态,并且计时器只能在应用程序位于前台时调用。有关更多信息,请参阅。 (Saw设置超时,持续时间为3601013ms)

我不介意尝试尽可能多地解决警告,但它提供的堆栈跟踪没有说明调用setTimeout的位置,这使得很难确定哪个模块正在执行此操作,因为我假定调用setTimeout的是一个外部模块

在TypeScript中,有没有一种方法可以替代setTimeout来执行类似的操作

global.setTimeout = 
  (f : ()=>unknown, timeout ) => { 
    if (timeout > 3600) { console.printStackTrace<?> } 
    global.setTimeout() 
  }

创建一个
错误
,可以抛出也可以不抛出。e、 g.:
抛出新错误('timeout too big')
您需要将原始setTimeout保存在某个位置并转发到原始设置。阅读如何使用monkeypatch或绕过内置函数
控制台。跟踪('It's here!')
可以吗?@Wyck monkeypatch可以在TypeScript上干净地完成吗?
// Monkeypatch setTimeout
const originalSetTimeout = setTimeout;
window.setTimeout = (fn, ms) => {
  if (ms > 3600000) {
    console.trace(`setTimeout called with ms=${ms} > 3600000`);
  }
  return originalSetTimeout(fn, ms);
};