1v1直播源码,保证请求时序的两种常用方法
1v1直播源码,保证请求时序的两种常用方法
在1v1直播源码中经常遇到请求输入查找场景,防抖与截流很好处理了频繁输入问题,但是不能解决最先发起请求结果后返回,覆盖了最后一次的搜索结果,导致搜索结果不正确。我总结一下自己常用的两种方法。
一、使用时间戳来过滤返回结果
如果请求回调函数中的时间戳小于当前时间戳则返回,说明已经处理了之后的请求结果了,这个请求过时了。
// 远程搜索商品 searchGoods(data) { if (!data) { return } if (this.isRemote) { const reqCount = new Date().getTime() this.OrderInquireQuerySpuAndUnit({ keyWord: data }).then(res => { if (reqCount < this.currentReqCount) { return } if (res.data) { if (res.data.length > 0) { this.goodsList = res.data } } }).catch(err => { console.log(err) }).finally(() => { this.currentReqCount = reqCount }) } },
二、基于axios封装统一的请求方法
后面发起的请求会取消之前等待返回结果的请求,需要多传一个cancelTokenPath,表示当前同一个输入组件发起的请求。
export const getRequest = param => { const { cancelTokenPath, ...restQuery } = (param && param.query) || {} // cancelTokenPath是为了避免页面中多处请求的同一个接,导致错误的取消 if (cancelTokenPath) { const CancelToken = axios.CancelToken const source = CancelToken.source() if (store[cancelTokenPath]) { store[cancelTokenPath].cancel('Canceled by the last request') } store[cancelTokenPath] = source } return new Promise((resolve, reject) => { Vue.axios .get(param.url, { params: restQuery || {}, headers: param.headers || {}, cancelToken: cancelTokenPath && store[cancelTokenPath].token }) .then(res => { resolve(res) }) .catch(err => { reject(err) }) }) }
以上就是1v1直播源码,保证请求时序的两种常用方法, 更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2022-06-22 视频直播系统源码,顶部标题栏的隐藏和标题修改
2022-06-22 短视频带货源码,保存图片到相册/图库
2022-06-22 短视频直播源码,EditText输入框的使用