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

Redux Toolkit Query调用updatePost mutation多次点击后请求pending数据不更新

问题根因与修复方案

1. 后端未返回响应导致请求一直pending

你提供的后端updatelike接口逻辑中,无论数据库操作成功/失败,都没有给前端返回HTTP响应,导致前端发起的请求一直处于等待响应的状态,对应RTK Query的mutation状态就会停留在pending。
修复方案:在数据库操作的回调中添加响应返回逻辑:

exports.updatelike = async (req, res) => { // 补充res参数
  try {
    console.log("UPDATELIKE");
    const d = new Date(Date.now());
    console.log(d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds());
    console.log(req.params.id);
    var values = {
      likes: req.body.likes,
      userslike: req.body.userslike,
      dislikes: req.body.dislikes,
      usersdislike: req.body.usersdislike,
    };
    var selector = { where: { id: req.params.id } };

    await Post.update(values, selector) // 改成async/await写法更易维护
    res.json({ success: true }) // 操作成功返回响应
  } catch (ex) {
    console.log(">> Error while Update one post : ", ex);
    res.status(500).json({ success: false, error: ex.message }) // 错误场景也返回响应
  }
};

2. 快速点击触发请求竞态导致数据更新异常

你当前的更新逻辑是前端直接计算点赞数后全量覆盖数据库字段,快速点击时多个请求先后顺序不可控,后发的请求可能携带旧的数值覆盖先发请求的正确更新,最终表现为数据没有更新。
修复方案二选一:

  • 前端层面:点击按钮后立刻设置loading状态禁用按钮,直到mutation请求返回后再恢复可点击状态,避免重复提交;同时可以加200-300ms的防抖,过滤连续点击的重复请求。
  • 后端层面:修改更新逻辑,用数据库原子操作代替前端传值覆盖,比如点赞操作直接执行likes = likes + 1的逻辑,从根源避免竞态:
// sequelize 原子更新写法示例
Post.update(
  { 
    likes: sequelize.literal('likes + 1'),
    userslike: sequelize.fn('array_append', sequelize.col('userslike'), req.body.userId) // 假设用户id从请求体取,根据你的实际逻辑调整
  },
  { where: { id: req.params.id } }
)

3. 前端onCacheEntryAdded逻辑不完整

你当前写的onCacheEntryAdded是async异步函数,但没有等待异步操作完成,也没有处理缓存清理逻辑,可能导致RTK Query内部状态异常。如果这个钩子没有实际业务逻辑可以直接删除,需要保留的话补充完整逻辑:

async onCacheEntryAdded(
  arg,
  { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry }
) {
  try {
    await cacheDataLoaded; // 等待请求完成
    console.log(arg)
    console.log("Mutation = ")
    console.log(getState().api.mutations)
  } catch (e) {
    // 处理请求错误逻辑
  } finally {
    await cacheEntryRemoved; // 等待缓存清理完成
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:09:02