Node.js调用twitter-API-client报ERR_UNHANDLED_REJECTION错误
问题产生原因
- 直接触发报错的核心原因是异步Promise异常未被捕获:
async声明的函数返回值本质是Promise对象,当函数内部await调用的followersList接口请求因为任意原因失败时,Promise会进入rejected状态,但你的代码既没有在函数内部通过try/catch捕获异常,也没有在函数调用时挂载.catch()处理拒绝逻辑,Node.js v8.x版本默认会对未处理的Promise拒绝抛出ERR_UNHANDLED_REJECTION错误,直接终止运行进程。 - 你当前看到的报错只是Node.js的异常提示,不是Twitter接口返回的真实错误:真实的接口错误(比如鉴权失败、权限不足、频率超限等)被未捕获的Promise隐藏了,没有打印输出,无法直接定位根因。
修复方案
- 第一步先给异步逻辑添加完整的异常捕获,把真实的接口错误打印出来定位根因,同时补充必要参数确保拉取到的是最新的关注者数据,修复后的参考代码如下:
async function get_followers() { try { const followers = await twitterClient.accountsAndUsers.followersList({ count: 3, cursor: -1, // 指定拉取第一页数据,也就是按关注时间倒序排列的最新关注者 skip_status: true // 可选配置,不需要返回用户最新推文时添加,减少冗余数据传输 }); console.log('最近3位关注者数据:', followers.users); } catch (err) { console.error('接口请求失败,具体错误信息:', err); } } // 调用时补充兜底catch,覆盖try块未捕获的边缘异常 get_followers().catch(err => { console.error('函数执行异常:', err); });
- 运行加了异常捕获的代码后,根据打印出的真实错误信息针对性排查问题:
- 如果返回401状态码:检查初始化
twitterClient时传入的API Key、API Secret、Access Token、Access Token Secret是否和Twitter开发者后台配置一致,确认令牌没有过期、没有被吊销 - 如果返回403状态码:检查开发者账号下的对应应用是否开启了用户数据读取权限,是否符合Twitter API的访问规则
- 如果返回429状态码:说明触发了接口请求频率限制,等限制窗口重置后再发起请求即可
- 如果返回401状态码:检查初始化
内容的提问来源于stack exchange,提问作者Gambhir Sharma
相关产品推荐
相关产品推荐

