【前端】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(() => {
   // 多个异步事件都完成了要处理的逻辑
});
相关推荐
初一初十7 小时前
vue3实现的纯前端护肤品商城网站
前端·javascript·vue.js·前端框架
卷帘依旧7 小时前
React状态管理方案怎么选
前端
李白的天不白7 小时前
ps -ef | grep java
java
zeqinjie7 小时前
Flutter 折叠屏 iPad / 宽屏适配实践
android·前端·flutter
ab_dg_dp7 小时前
Android 17+ 提取 AIDL 生成 Java 文件的实用脚本
android·java·python
超哥--7 小时前
B站视频内容智能分析系统(三):B站视频自动采集
java·开发语言·音视频·ai编程
小村儿7 小时前
连载13- 内部Tools,Claude Code 怎么真正"动"你的代码
前端·后端·ai编程
IT_陈寒7 小时前
Python的线程池把我坑惨了,原来异步不是万能的
前端·人工智能·后端
郑洁文7 小时前
基于SpringBoot的商品仓库管理系统的设计与实现
java·spring boot·后端·仓库管理系统·商品仓库管理系统
布朗克1688 小时前
22 异常处理——从入门到精通的完整指南
java·异常处理