软件教程 2025年08月6日
0 收藏 0 点赞 577 浏览 2099 个字
摘要 :

文章目录 一、啥是发布订阅模式?要解决啥问题? 二、需求分析 三、实现思路详解 四、代码实现及解读 五、测试结果 六、总结 大家知道如何使用Promise实现发布订阅模式……




  • 一、啥是发布订阅模式?要解决啥问题?
  • 二、需求分析
  • 三、实现思路详解
  • 四、代码实现及解读
  • 五、测试结果
  • 六、总结

大家知道如何使用Promise实现发布订阅模式吗?感觉挺有意思,就自己动手实践了一把,今天来给大伙分享分享。

一、啥是发布订阅模式?要解决啥问题?

发布订阅模式,简单来说,就是一种消息通信模式。在这个模式里,有生产者和消费者。生产者负责发布消息,消费者呢,负责接收并处理这些消息。打个比方,你在电商平台上关注了某个店铺(相当于订阅),店铺上新(发布消息)后,你就能收到通知(处理消息),这就是典型的发布订阅场景。咱们今天要用Promise来实现一个简单的发布订阅模式。

二、需求分析

这次的需求就是利用Promise里的resolve方法和then方法,打造一个简易的发布订阅者模式。具体拆分开来,就是把resolve方法当成生产者发布消息的途径,把then方法作为消费者接收和处理消息的方式。

三、实现思路详解

  1. 定义发布消息的函数:得写一个produce函数,这个函数基于resolve方法,专门用来发布消息。
  2. 添加订阅者的函数:还需要一个addConsumer函数,用它来添加那些订阅消息的消费者。
  3. 消息处理机制:通过then方法来接收生产者发布的消息,并且执行相应的处理操作。

四、代码实现及解读

// 定义一个函数,用于创建发布订阅模式的实例
function ProducerConsumerPattern() {
    // 用于存储发布消息的函数
    let produce;
    // 用于存储消费者函数的数组
    const consumers = [];

    // 创建一个Promise实例
    const promise = new Promise((resolve, reject) => {
        // 定义发布消息的函数produce
        produce = (message) => {
            // 当调用produce函数时,通过resolve发布消息
            resolve(message);
        }
    });

    // 当Promise状态变为resolved时,执行这个回调函数
    promise.then((message) => {
        // 如果没有消费者订阅
        if (consumers.length === 0) {
            console.log(\'no consumer\');
            return;
        }
        // 遍历消费者数组,依次调用每个消费者函数处理消息
        consumers.forEach((consume) => {
            consume(message);
        });
    });

    // 定义添加消费者的函数
    function addConsumer(consumer) {
        // 检查传入的consumer是否是函数
        if (typeof consumer!== \'function\') {
            console.log(\'consumer is not a function\');
            return;
        }
        // 如果是函数,则添加到消费者数组中
        consumers.push(consumer);
    }

    // 返回包含发布消息函数和添加消费者函数的对象
    return {
        produce,
        addConsumer,
    };
}

// 测试
const { produce, addConsumer } = ProducerConsumerPattern();

addConsumer(console.log); // hello
addConsumer((message) => {
    console.log(`${message} another consumer`);
});

produce(\'hello\');

上面这段代码,整体逻辑是这样的:

  • 先定义了ProducerConsumerPattern函数,在这个函数内部,声明了produce变量和consumers数组。produce用来发布消息,consumers用来存放所有的消费者函数。
  • 通过Promise的构造函数创建了一个promise实例,在这个实例内部定义了produce函数,它调用resolve方法发布消息。
  • promise.then用于监听resolve发布的消息,当有消息发布时,如果有消费者(consumers数组不为空),就依次执行每个消费者函数来处理消息。
  • addConsumer函数负责把传入的消费者函数添加到consumers数组里,不过会先检查传入的是不是函数。
  • 最后进行测试,先获取produceaddConsumer函数,然后添加两个消费者,一个直接打印消息,另一个在消息后添加内容再打印,最后调用produce发布消息。

五、测试结果

运行上面的测试代码后,控制台输出如下:

hello
hello another consumer

可以看到,成功实现了发布订阅的效果,生产者发布的消息被消费者正确接收并处理了。

六、总结

通过这次实践,我们利用Promise的resolvethen方法,成功实现了一个简单的发布订阅模式。在这个模式里,生产者用resolve发布消息,消费者通过then来订阅和处理消息。虽然这个模式比较简单,但在一些小型项目或者简单的异步消息传递场景中,还是挺实用的。如果大家对Promise和发布订阅模式感兴趣,不妨自己动手试试,说不定能发现更多有趣的应用场景。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/6795.html

管理员

相关推荐
2025-08-06

文章目录 一、Promise基础回顾 二、Promise 与 axios 结合使用场景及方法 (一)直接返回 axios …

269
2025-08-06

文章目录 一、模块初始化时的内部机制 二、常见导出写法的差异分析 (一)写法一:module.exports…

107
2025-08-06

文章目录 一、ResizeObserver详解 (一)ResizeObserver是什么 (二)ResizeObserver的基本用法 …

683
2025-08-06

文章目录 一、前期准备工作 (一)下载相关文件 (二)安装必要工具 二、处理扣子空间生成的文件…

338
2025-08-06

文章目录 一、官方文档 二、自动解包的数据类型 ref对象:无需.value即可访问 reactive对象:保持…

371
2025-08-06

文章目录 一、Hooks的工作原理 二、在if语句中使用Hook会出什么岔子? 三、React官方的Hook使用规…

843
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号