【前端】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(() => {
   // 多个异步事件都完成了要处理的逻辑
});
相关推荐
独自破碎E4 小时前
BISHI23 小红书推荐系统
java·后端·struts
xqqxqxxq4 小时前
Java IO 核心:BufferedReader/BufferedWriter & PrintStream/PrintWriter 技术笔记
java·笔记·php
Aric_Jones5 小时前
idea使用.env运行SpringBoot项目
java·spring boot·intellij-idea
Jing_Rainbow5 小时前
【React-6/Lesson89(2025-12-27)】React Context 详解:跨层级组件通信的最佳实践📚
前端·react.js·前端框架
gustt5 小时前
构建全栈AI应用:集成Ollama开源大模型
前端·后端·ollama
如果你好5 小时前
UniApp 路由导航守卫
前端·微信小程序
im_AMBER5 小时前
告别“玄学”UI:从“删代码碰运气”到“控制 BFC 结界”
前端·css
bjzhang755 小时前
使用 HTML + JavaScript 实现文件树
javascript·html·文件树
刘一说5 小时前
Java 中实现多租户架构:数据隔离策略与实践指南
java·oracle·架构
千寻girling5 小时前
《 MongoDB 教程 》—— 不可多得的 MongoDB
前端·后端·面试