You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mobx中如何调试打印initTime函数里的window.time与moment.utc()?

如何调试Mobx中的initTime函数并正确打印window.time和moment.utc()的值

让我们一步步拆解你遇到的问题,然后给出正确的调试方式:

先搞清楚你遇到的几个错误原因

  • 为什么actions.initTime.server_time返回undefined?
    actions.initTime是一个函数,server_time是这个函数执行后返回的对象的属性,不是函数自身的属性。你直接访问函数的server_time属性,自然会得到undefined。

  • 为什么在initTime返回的对象里加console.log(window.time)会报错?
    对象字面量({ ... })里只能定义键值对,不能直接写执行语句(比如console.log)。这种写法本身就不符合JavaScript语法,所以会触发语法错误。

  • 为什么用then方法会得到undefined?
    initTime是一个同步函数,它返回的是普通对象,不是Promise。只有Promise才有then方法,你强行调用then不仅不会拿到结果,还会因为函数没有这个方法而报错,最终得到undefined。


正确的调试方法

方法1:在initTime函数内部打印值

把console.log放在函数体里,在return之前执行,这样每次调用函数时都会打印:

export const initTime = () => {
  // 先打印需要调试的值
  console.log("当前window.time的值:", window.time);
  console.log("当前moment.utc()的值:", moment.utc());
  
  return {
    server_time: window.time || moment.utc(),
  };
};

方法2:在调用initTime的地方打印返回结果

如果你想在init函数里查看值,可以直接调用actions.initTime()拿到返回对象,再打印里面的属性或者原始值:

@action.bound
init() {
  // 先手动调用一次函数,拿到返回结果并调试
  const timeObj = actions.initTime();
  console.log("server_time返回值:", timeObj.server_time);
  console.log("window.time:", window.time);
  console.log("moment.utc():", moment.utc());

  // 再设置定时器
  this.time_interval = setInterval(actions.initTime, 1000);
}

额外提醒

如果你想在定时器的每次执行中都看到日志,可以修改定时器的回调,把打印逻辑加进去:

@action.bound
init() {
  this.time_interval = setInterval(() => {
    const timeObj = actions.initTime();
    console.log("定时器触发的server_time:", timeObj.server_time);
  }, 1000);
}

内容的提问来源于stack exchange,提问作者merry-go-round

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:38:19