【前端】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(() => {
   // 多个异步事件都完成了要处理的逻辑
});
相关推荐
踩着两条虫4 分钟前
VTJ.PRO的平台介绍与特性
前端·架构·ai编程
梦魇星虹14 分钟前
idea Cannot find declaration to go to
java·ide·intellij-idea
光影少年15 分钟前
前端工程化升级
前端·javascript·react.js·前端框架
Hello--_--World22 分钟前
节流 VS 防抖 相关知识点与面试题
前端·javascript
小雅痞22 分钟前
[Java][Leetcode hard] 42. 接雨水
java·开发语言·leetcode
xfcoding22 分钟前
关于代码注释的思考
java
We་ct26 分钟前
AI辅助开发术语体系深度剖析
开发语言·前端·人工智能·ai·ai编程
去伪存真33 分钟前
Superpowers 从“调教提示词”转向“构建工程规范”
前端·agent
虹梦未来36 分钟前
【开发心得】在SpringBoot体系中正确使用redisConfig
java·spring boot·spring
skiy36 分钟前
Spring Framework 中文官方文档
java·后端·spring