- 撤销(Ctrl+Z)
- 重做(Ctrl+Y)
- 清空
- H 标题(Ctrl+1~6)
- 一级标题
- 二级标题
- 三级标题
- 四级标题
- 五级标题
- 六级标题
- 插入提示
- 提示
- 注意
- 警告
- 详细信息
- 粗体(Ctrl+B)
- 斜体(Ctrl+I)
- 删除线
- 插入引用(Ctrl+Q)
- 无序列表(Ctrl+U)
- 有序列表(Ctrl+O)
- 表格
- 插入分割线
- 插入链接(Ctrl+L)
- 插入图片
- 添加图片链接
- 插入代码块
- 关闭同步滚动
- 全屏(按ESC还原)
- 开启预览
运行环境:nodejs<br>需求:提供一个方法 getD ,此方法内调用 ajax 接口获取数据,然后对外输出<br>1 、异步调用,比如会同时执行 30 次 getD<br>2 、当第一次调用 getD ,方法内没有数据,会从 ajax 拿数据,每次拿 10 条,等待中,当拿到数据后,用一条对外提供<br>3 、当第二次及后续调用 getD<br> a 如果有前面(第一次)正在 ajax 中,则等待,当 ajax 请求拿到数据后,第二次及后续的用拿到的数据<br> b 如果前面没有 ajax 中,则直接使用数据<br>4 、当 ajax 拿到的数据用完后,重复 2-3 ,但 ajax 每次请求间隔,须相隔 2s<br><br>不知道咋写,写出的也不满足,谢谢大家
运行环境:nodejs
需求:提供一个方法 getD ,此方法内调用 ajax 接口获取数据,然后对外输出
1 、异步调用,比如会同时执行 30 次 getD
2 、当第一次调用 getD ,方法内没有数据,会从 ajax 拿数据,每次拿 10 条,等待中,当拿到数据后,用一条对外提供
3 、当第二次及后续调用 getD
a 如果有前面(第一次)正在 ajax 中,则等待,当 ajax 请求拿到数据后,第二次及后续的用拿到的数据
b 如果前面没有 ajax 中,则直接使用数据
4 、当 ajax 拿到的数据用完后,重复 2-3 ,但 ajax 每次请求间隔,须相隔 2s
不知道咋写,写出的也不满足,谢谢大家
user2 • • 目录导航
这里要考虑一个问题,只有一个进程还是会有多个进程。如果是单进程的,直接用变量就能实现;多进程需要借助其他服务。 |
user3 • • 目录导航
用 async generator 来写试试 |
user1 • • 目录导航
|
user2 • • 目录导航
let pending; |
user3 • • 目录导航
不考虑多线程: |
user1 • • 目录导航
|
user2 • • 目录导航
感谢大家帮忙,没来得及看,用 2 楼的方法解决了 |
user3 • • 目录导航
|
user1 • • 目录导航
你说的这个用 Streams API 很容易实现: |
user2 • • 目录导航
综合看下来,我自己写的话应该也和 @Curtion 差不多。 |
user3 • • 目录导航
|
user1 • • 目录导航
|
user2 • • 目录导航
|


好像没啥难度?
做一个 对象,首先需要一 or 两个锁,然后需要一 or 两个队列。
发起 ajax 需要过一下锁,ajax 发出前锁定,ajax 成功后,锁设置过期时间 2s 。
getD 先检查队列是否能取到,成功就返回,失败就 ajax , 如果发出就等成功,失败就把回调推入等待队列。
ajax 成功后挨个讲结果回调给等待队列。