【发布时间】:2021-10-22 03:27:21
【问题描述】:
我最近深入研究了 Subject/BehaviorSubject/ 等的订阅,我正在寻找与 Promises 结合使用时的 goto 方法。
给出的示例代码如下:
firebase.user.subscribe((user: any | null) => {
fs.readFile('path/to/file')
.then((buf: Buffer) => {
this.modifySomeData = buf;
});
});
我订阅了一个主题,该主题在用户登录或退出其服务时触发。每当发生这种情况时,我都会从磁盘读取文件。此readFile 事件可能可能比下一个“登录/注销”事件花费更长的时间。当然,我在 JS 和异步环境中。这意味着,我的用户代码不是多线程的,但第二个用户事件和第二个 readFile 理论上可能比第一个 readFile 更快。
- 第一个用户事件被触发
- 第一个 readFile 被执行
- 第二个用户事件被触发
- 第二个 readFile 被执行
- 第二个 readFile 被解析
- 第一个 readFile 已解析
顺序搞混了。我能想到的最愚蠢的方法是在读取文件之前创建一个uuid,并检查承诺是否仍然相同。如果不是,我会丢弃数据。
有没有更好的解决方案?
【问题讨论】:
标签: javascript node.js typescript promise observable