Symbol 小妙处
2024-09-17 14:05:43
input 框输入后发送异步请求,页面拿到响应进行渲染。但偶尔会遇到问题:响应内容和输入结果不一致。因为 http 无法保证响应到达的顺序。
如何解决呢?提供一个小思路。
myRequest.js
import request from '@/request'
function myRequest (opts) {
if (!opts.pid) throw {message: 'pid 不能为空'}
const KEY = Symbol.for(opts.pid)
const requestId = ~~myRequest[KEY] + 1
myRequest[KEY] = requestId
return request(opts)
.then(res => {
return myRequest[KEY] === requestId
? res
: null
})
}
export default myRequest
我们使用 requestId 标识请求的次数,并将其封装到 myRequest 函数对象内。处理响应时,比较这两个值,若不相等则丢掉。这保证页面渲染的数据始终是最新的。
Symbol.for(..) 在全局符号注册表中搜索,来查看是否有描述文字相同的符号已经存在,如果有的话就返回它。如果没有的话,会新建一个并将其返回。
在上例中,Symbol 保证了键的唯一性,也减少了一次判断。
最新文章
- 如何用C#代码判断一个类的类型
- NFS服务器原理
- C++ - 虚基类、虚函数与纯虚函数
- Java多线程总结(二)锁、线程池
- oracle11g 连接问题
- Android项目能运行,上传svn后再下载却不能运行
- Fedora 17配置ssh及Windows远程连接
- container_of用法及实现
- swift 2 选择头像图片
- NYOJ 66 分数拆分
- poj 1704 Georgia and Bob(阶梯博弈)
- 从模板模式到JdbcTemplate
- 使用描述符实现property功能
- java0424 wen 集合框架2
- Creating and using a blendspace in c++
- [TJOI2017]城市
- 再谈一次关于Java中的 AIO(异步IO) 与 NIO(非阻塞IO)
- 【Java】JVM(六)虚拟机字节码执行引擎
- Spring Boot REST
- 作业1-MathExam