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

使用mitt.emit()报错TypeError: n2 is not a function的修复方案咨询

修复 mitt.emit() 报错 "TypeError: n2 is not a function" 的方案

排查及解决步骤

  • 检查事件订阅的回调类型
    这个报错基本是因为setData事件的订阅列表里混进了非函数值。mitt会挨个执行订阅该事件的回调,只要有一个不是函数,就会触发这个错误。
    去查所有写了bus.on('setData', ...)的代码,确认传进去的都是函数,别把对象、字符串这类普通值当成回调传了。

  • 确保事件总线实例是同一个
    触发事件的bus和订阅事件的bus必须是同一个实例。如果是跨模块导入,别在多个地方重复执行const bus = mitt()创建新实例——不然订阅和触发不在同一个总线里,甚至可能把原有实例的属性冲掉,导致异常。

  • 核对事件名拼写
    确认emit的setData和所有on里的事件名完全一致,大小写、字符都不能错。比如订阅的是小写d的setdata,触发的是大写D的setData,要么匹配到错误的订阅项,要么找不到正确回调,都可能引发这个报错。

  • 清理无效订阅
    如果是组件场景,组件卸载时记得用bus.off('setData', 对应的回调)移除订阅。要是没清理,组件卸载后残留的无效引用可能在触发时出错。要是不确定具体回调,临时用bus.all.clear()清空所有订阅(注意别影响其他正常事件)。

  • 直接打印订阅列表定位问题
    在bus.emit之前加一行代码打印订阅者:

    console.log(bus.all.get('setData'));
    bus.emit('setData', data);
    

    从控制台输出里能直接看到所有订阅setData的内容,找到那个非函数的项,对应去改代码就行。

内容的提问来源于stack exchange,提问作者pu pu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 02:42:25