WebFlux出现接口已返回成功,但查询时数据未改变的问题

问题描述

在使用WebFlux时遇到一个很奇怪的问题,先调用禁用账号接口,接着在进行查询该数据,结果页面显示数据未改变,在点一次时页面数据才刷新。即连续点两次查询接口,才能看到修改后的数据。

相关代码

前端

const disableAccount = (record) => {
  if (record && record.accountId) {
    disableAccountApi(record.accountId).then(() => {
      query();
    });
  }
};

后端

    @PostMapping("/{id}/disable")
    public R<Object> disableAccount(@PathVariable("id") String id){

        accountService.disableAccount(id);
        return R.message("已禁用该账号");
    }


    public void disableAccount(String id) {

         accountRepo.findById(id)
                .flatMap(accountDO -> {
                    accountDO.disabled();
                    return accountRepo.save(accountDO);
                }).subscribe();
    }

寻找原因

刚开始的时候以后时前端页面没有刷新的原因,尝试使用forceUpdate强制更新页面。发现没什么效果。后面通过使用onUpdated打印页面更新时的数据,发现和数据库不一致,即数据并未更新。由此想到WebFluxMono\Flux运行在不同的线程上。上面那种直接在方法中订阅,实际上接口返回之后,订阅的Mono还在执行。所以修改代码,不直接订阅Mono\Flux,将Mono\Flux作为返回值返回,就可以了

改正后的代码

    @PostMapping("/{id}/disable")
    public Mono<R<Object>> disableAccount(@PathVariable("id") String id){

        return accountService.disableAccount(id).thenReturn(R.message("已禁用该账号"));
    }

    public Mono<AccountDO> disableAccount(String id) {

        return accountRepo.findById(id)
                .flatMap(accountDO -> {
                    accountDO.disabled();
                    return accountRepo.save(accountDO);
                });
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值