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

Typescript搭配NodeRedis连接Redis时出现queueMicrotask错误如何解决

问题根因

该报错是Node.js版本过低导致的:你安装的是v4.x及以上版本的redis(NodeRedis)包,该版本依赖Node.js 12.x及以上运行环境,内部用到了queueMicrotask API,而你当前使用的Node.js版本低于11.0.0,原生没有提供这个API,因此触发引用错误。

解决方案

可根据你的项目情况选择以下任意一种方案:

  • 方案1(最推荐):升级Node.js版本到12.x或更高的LTS版本,升级完成后重新执行npm install安装依赖即可正常运行原有代码。
  • 方案2(兼容低版本Node.js):降级redis包到v3版本,该版本兼容低版本Node.js:
    1. 卸载现有redis包:npm uninstall redis
    2. 安装v3版本:npm install redis@3
      注意v3版本API和v4存在差异:无需主动调用connect()、disconnect()方法,创建客户端后默认自动连接,set方法的参数格式也需要调整,示例如下:
    import * as redis from 'redis';
    import { promisify } from 'util';
    
    const redisClient = redis.createClient();
    const setAsync = promisify(redisClient.set).bind(redisClient);
    
    redisClient.on('error', (err: Error) => {
      console.log('Error', err.name);
    });
    redisClient.on('connect', () => console.log('Ok'));
    
    try {
      await setAsync(token, email, 'EX', '40', 'NX');
    } catch (err) {
      console.log('Error', err);
    }
    
  • 方案3(临时兼容):不想调整版本的话,可以在项目入口文件最顶部添加queueMicrotask的polyfill代码:
    declare global {
      function queueMicrotask(callback: () => void): void;
    }
    
    if (typeof queueMicrotask === 'undefined') {
      (global as any).queueMicrotask = (callback: () => void) => Promise.resolve().then(callback);
    }
    
    该方案仅为临时兼容方案,不建议长期使用。

内容的提问来源于stack exchange,提问作者Samuel Sánchez Álvarez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:27:03