例如:第一次输入'如何',后端返回给我标题带有'如何'的文章数据,页面渲染'如何'相关文章
继续输入'准备',后端返回给我标题带有'如何准备'的文章数据,页面渲染'如何准备'相关文章
引发了一个问题 因为后端接口查'如何准备'返回的数据更快 导致页面先渲染'如何准备'相关文章然后又快速渲染'如何'相关文章 几乎看不到'如何准备'相关文章 感觉就像是搜索'如何准备'
页面渲染的是'如何'相关文章 请问这种问题 有什么好的解决方案吗?
可以考虑给页面加一个loading效果,只有当loading结束的时候才去请求下一个
常规的办法是做一下防抖(Debounce)你可以设置一个300毫秒的防抖时间,这样在用户连续输入时候,用户输入完之后300毫秒后才会发送请求。
防抖是防抖,但防抖不是为了解决这个时序问题的,它只是为了避免“输一个字符就发起一个请求”这种问题的。
正确的做法是全局存储一个 key,请求前生成一个唯一值、并利用闭包的特性获取其一份副本,然后请求结束后时比较副本和全局存储的 key,如果不相等,说明后面又有新的请求了,那就丢掉本次响应。
伪代码:
let loadingKey = 0;const request = () => { loadingKey++; const currentKey = loadingKey; return axios.request({ /* 请求参数略 */ }) .then((res) => { if (currentKey !== loadingKey) { return; // 丢弃响应 } console.log(res); // todo });}Promise.all([ request(), request(), request() // 只有最后发出的请求的响应会被保留,前面的即使响应时序是后回来的,也会被丢弃]);
大名鼎鼎的 ahooks
库的 useRequest 就是这样实现的,当然它那个里面还有很多别的功能,所以代码看起来很复杂,但抽丝剥茧背后的原理是一样的。它是全局持有了一个 count
对象,每次 runAsync
之前 +1 然后持有了一个副本 currentCount
。跟这里的 loadingKey
、currentKey
是一回事儿。
当然你也可以配合 axios 的 CancelToken 来实现,但这个方案跟 axios 就耦合过深了,以后换库就不太好办。
上述代码在开发阶段,pc 和 移动端模拟器中访问,数据请求正常且渲染成功; 部署服务器后,移动端真机没有发起请求,其他访问方式正常。 有无大佬遇到过或知道怎么解决? 目标站点(未备案) http://114.132.79.6/
问题内容: 我正在尝试通过COM端口发送AT命令,但只重新发送了相同的命令。 日志: 16:19:21.910 [main]调试SerialConnections.M234Serial-创建实例。 16:19:21.974 [main]调试SerialConnections.M234Serial-发送请求:AT ^ SCFG? 16:19:23.976 [EventThread COM55]调试S
上节介绍的,都是针对单条数据的操作。在 ES 环境中,更多的是搜索和聚合请求。在 5.0 之前版本中,数据获取和数据搜索甚至有极大的区别:刚写入的数据,可以通过 translog 立刻获取;但是却要等到 refresh 成为一个 segment 后,才能被搜索到。从 5.0 版本开始,Elasticsearch 稍作了改动,不再维护 doc-id 到 translog offset 的映射关系,一
vue2前端 代码如下 报错 created里的get请求可以获取到数据,为什么不渲染,报错搜索没有想要的结果,求求各位大佬帮忙看一下
本文向大家介绍jQuery中ajax请求后台返回json数据并渲染HTML的方法,包括了jQuery中ajax请求后台返回json数据并渲染HTML的方法的使用技巧和注意事项,需要的朋友参考一下 html实例 jquery实例 php实例 以上这篇jQuery中ajax请求后台返回json数据并渲染HTML的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
请求的接口信息: 没有返回东西: 控制台报错: 前端代码: import axios from 'axios' import { baseURL, taskURL } from './resource' // 3.ES6 Promise 封装方式 export function request(options) { } 求大家帮个忙看看到底是哪里问题,要怎么修改,谢谢