美文网首页
前端实时查询,网络请求数据结果覆盖问题

前端实时查询,网络请求数据结果覆盖问题

作者: pursuepursuing | 来源:发表于2019-12-23 15:58 被阅读0次

问题

在前端页面数据查询时,可能会遇到实时搜索的需求。在实时搜索时,就可能存在一个问题,就是后一次请求数据被前一次覆盖的问题。

环境

vue项目,使用axios发请求

思考过程

  1. 解决以上问题,我们实际只需要向后台发送最后一次数据请求就可以了。
  2. 但是,我们如何才能知道用户哪次的请求是最后一次改变搜索参数呢?
  3. 鉴于问题2,我们如果能够在发送请求前,取消前一次请求就可以解决问题了

解决方案

在axios中有提供一个取消请求的方法,下面是示例代码

const CancelToken = axios.CancelToken;
const source = CancelToken.source();

axios.get('/user/12345', {
  cancelToken: source.token
}).catch(function (thrown) {
  if (axios.isCancel(thrown)) {
    console.log('Request canceled', thrown.message);
  } else {
    // handle error
  }
});

axios.post('/user/12345', {
  name: 'new name'
}, {
  cancelToken: source.token
})

// cancel the request (the message parameter is optional)
source.cancel('Operation canceled by the user.');

那么这样,我们只需要在每一次请求之前,调用cancel方法就可以取消前一次请求,就不会存在数据覆盖问题啦。

进一步思考

cancel真的取消了数据查询请求吗?

通过查看axios源码,发现cancel方法实际上是调用XMLHttpRequest.abort()实现的。
实际上,后台接收到前端的http请求后,就算前端调用了cancel方法,但是后台还是会对请求进行处理。那么我们目前对实时请求的解决方案并不能减少后台处理无用请求的次数。

方案二

针对以上问题,如果想同时减少后台查询的压力,我们可以给查询方法加一层防抖处理。但是这样有一个弊端就是,查询请求会有延时。

相关文章

  • 前端实时查询,网络请求数据结果覆盖问题

    问题 在前端页面数据查询时,可能会遇到实时搜索的需求。在实时搜索时,就可能存在一个问题,就是后一次请求数据被前一次...

  • nodejs前后端的数据交互

    数据流向一般是:前端请求 ---->后端数据校验 ---->查询数据库 ---->响应前端 基本的数据库sql(结...

  • Lambda架构

    大数据系统的关键问题:如何实时地在任意大数据集上进行查询?最简单的方法是,直接在全体数据集上运行查询函数得到结果,...

  • 开发私信对话遇到的问题

    1.前端实现消息对话实时更新 当时这个问题是这么解决的,每两秒请求更新一次数据,每次更新数据增加10条请求的条数s...

  • 前端和后端是如何交互的

    1、前端请求数据URL由谁来写 在开发中,URL主要是由后台来写好给前端。 若后台在查询数据,需要借助查询条件才能...

  • 前后端是如何交互的

    1、前端请求数据URL由谁来写 在开发中,URL主要是由后台来写好给前端。 若后台在查询数据,需要借助查询条件才能...

  • 前端和后台如何做交互

    1、前端请求数据URL由谁来写 在开发中,URL主要是由后台来写好给前端。 若后台在查询数据,需要借助查询条件才能...

  • 前端和后端是如何交互的

    1、前端请求数据URL由谁来写 在开发中,URL主要是由后台来写好给前端。 若后台在查询数据,需要借助查询条件才能...

  • 前后端是如何交互的

    1、前端请求数据URL由谁来写 在开发中,URL主要是由后台来写好给前端。 若后台在查询数据,需要借助查询条件才能...

  • 前端和后端是如何交互的

    1、前端请求数据URL由谁来写 在开发中,URL主要是由后台来写好给前端。 若后台在查询数据,需要借助查询条件才能...

网友评论

      本文标题:前端实时查询,网络请求数据结果覆盖问题

      本文链接:https://www.haomeiwen.com/subject/tcnznctx.html