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
相关产品推荐
相关产品推荐

