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

whatsapp-web.js监听ready事件的Promise无法触发,无法返回就绪客户端求助

whatsapp-web.js监听ready事件的Promise无法触发,无法返回就绪客户端求助

我来帮你排查下这个问题!你当前的代码有几个关键问题导致ready事件的Promise一直没触发,咱们一步步来解决:

首先最致命的问题:你是先调用了client.initialize(),再去绑定ready事件监听器的!这就好比你先点燃了烟花,再去准备看烟花——如果初始化过程很快,ready事件可能在你绑定监听器之前就已经触发了,你的回调自然接不到信号。

其次,你的Promise只处理了成功的情况,完全没考虑初始化失败的场景!如果客户端在初始化时出错(比如MongoDB连接异常、RemoteAuth认证失败),你的代码没有任何错误监听,Promise会一直处于pending状态,你根本不知道哪里出了问题。

给你调整后的代码,修复了这些问题:

await mongoose.connect(process.env.MONGODB_URI!)
console.log("MongoDB连接成功") // 加个日志确认数据库连接正常

const store = new MongoStore({ mongoose: mongoose })
const client = new Client({
  authStrategy: new RemoteAuth({
    store: store,
    backupSyncIntervalMs: 300000,
  }),
})

return new Promise<wweb.Client>((resolve, reject) => {
  // 先绑定所有事件监听器,再初始化!
  client.on("ready", () => {
    console.log("client is ready")
    resolve(client)
  })

  // 必须加上错误监听,不然出问题全靠猜
  client.on("error", (err) => {
    console.error("客户端初始化出错:", err)
    reject(err)
  })

  // RemoteAuth专属的认证失败事件也加上,针对性排查问题
  client.on("auth_failure", () => {
    console.error("RemoteAuth认证失败,请检查配置和存储")
    reject(new Error("Authentication failed during RemoteAuth setup"))
  })

  console.log("initializing client")
  // 最后再启动初始化流程
  client.initialize()
})

另外再给你几个排查方向:

  • 确认MongoDB的连接真的没问题:有时候await mongoose.connect()看似成功,但实际可能是连接到了错误的数据库,或者没有读写权限,导致RemoteAuth的store无法正常工作,客户端卡初始化。
  • 检查RemoteAuth的存储:看看MongoDB里对应的集合有没有内容,有没有权限读写。如果存储出问题,客户端无法加载认证会话,就不会触发ready。
  • 试试重置认证会话:如果之前的会话过期或者损坏,可以清空MongoDB里的RemoteAuth相关集合,让客户端重新走一次认证流程。

备注:内容来源于stack exchange,提问作者paternostrox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 12:44:36