为了账号安全,请及时绑定邮箱和手机立即绑定

d3.timer 是否在重新运行之前等待回调完成?

d3.timer 是否在重新运行之前等待回调完成?

哆啦的时光机 2023-06-09 15:45:58
d3.timer 的文档如下:d3.timer(回调[, 延迟[, 时间]]) <>安排一个新的计时器,重复调用指定的回调,直到计时器停止。可以指定一个可选的以毫秒为单位的数字延迟,以在延迟后调用给定的回调;如果未指定延迟,则默认为零。延迟是相对于指定时间的毫秒数;如果未指定时间,则默认为现在。“重复调用指定的回调”是什么意思?更准确地说,d3.timer 是否等待回调完成,然后再次运行?
查看完整描述

1 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

这取决于你所说的“等待回调完成”的意思。它是同步运行(因此连续运行)的非常慢的函数吗?好的。


d3.timer(() => {

  const now = Date.now();

  while(Date.now() - now < 1000) {}; // do nothing, but keep the process engaged

  console.log("Ping");

});

<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

但如果它是一个异步函数——比如一个 API 调用——它会取消进程的调度,那么就不会。


let i = 0,

  j = 0;

d3.timer(() => {

  // Break after 100 iterations

  if(j > 100) {

    return true;

  }


  // do nothing, but release the process

  // so the thread can go do other things

  console.log("Scheduled promise", j);

  j++;

  

  return new Promise((resolve) => {

    setTimeout(() => {

      resolve(i);

      console.log("Resolved promise", i);

      i++;

    }, 1000);

  });

});

<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>


查看完整回答
反对 回复 2023-06-09
  • 1 回答
  • 0 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信