【前端】Defer:存储Promise状态,多个异步事件都结束后处理一些逻辑

文章目录

前言

看源码发现一段代码,遂学习。

代码

typescript 复制代码
export class Defer<T = unknown> {
  promise: Promise<T>;
  resolve!: (value: T) => void;
  reject!: (reason?: unknown) => void;

  constructor() {
    this.promise = new Promise<T>((resolve, reject) => {
      this.resolve = resolve;
      this.reject = reject;
    });
  }
}

使用

假如有多个异步 事件,可以通过上述Defer控制。

假如,有一个关闭弹窗 的事件,我不知道它什么时候发生。 我需要在此事件和其他异步事件都发生之后再处理一些事。

声明一个Defer:

typescript 复制代码
const popupCloseDefer = useRef(new Defer<boolean>());

关闭弹窗的事件发生了:

typescript 复制代码
popupCloseDefer.current.resolve(true);

几个异步事件都完成后再处理某逻辑:

typescript 复制代码
const initDefer = [
    playerDefer.current.promise,
    popupCloseDefer.current.promise,
];


Promise.all(initDefer).then(() => {
   // 多个异步事件都完成了要处理的逻辑
});
相关推荐
啃瓜子的松鼠6 分钟前
泛微OAe9-后端二开异步调用
java
FRing031 小时前
JavaScript入门到精通三十二(深拷贝、浅拷贝、递归函数)
开发语言·前端·javascript
秋天的怀念_David1 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
excel1 小时前
双 Token 与前端使用 Crypto 公私钥鉴权换 Token,哪种方案更好?
前端·后端
外收内放1 小时前
Python基础语法练习题(73)
java·前端·python
Wang's Blog1 小时前
Java 项目实战: 交友项目 - 环信后台发送消息测试
java·交友
用户3721574261352 小时前
Java 操作 Word 脚注和尾注:添加、读取与删除
java
风骏时光牛马2 小时前
面向复杂场景的大模型应用落地与能力优化实践
前端
小小善后师2 小时前
我做了个病历归档小程序,被 AI 识别的"最后一公里"狠狠上了一课
前端
小嘉丶学长2 小时前
Day14 · 字典与集合
java·开发语言·网络·python·学习·1024程序员节