美文网首页日常刻书
多异步之间的协作

多异步之间的协作

作者: F_wind | 来源:发表于2021-01-03 21:20 被阅读0次

《深入浅出 Node.js》阅读随笔

Node.js 的中发布/订阅模式,一般用于解决一次发布对应多次订阅的情况。但在实际业务场景中,可能会存在多个发布对应一次订阅的情况,也就是多个有关联的异步任务之间的协作。比如有 A、B、C 三个任务。当它们都执行完毕之后,再执行一个最终的任务。下面我们通过一个简单的例子,来实现多异步协作的功能:

const { EventEmitter } = require("events");
const task = new EventEmitter();
/**
 * 执行最终任务
 */
const finishTask = (list) => {
  console.log("finish task list:", list);
};
/**
 * 一个用于辅助调度的偏函数
 * @param {*} times 异步任务的数量
 * @param {*} callback 回调
 */
const after = (times, callback) => {
  let count = 0,
    result = {};
  return (key, value) => {
    result[key] = value;
    count++;
    if (count === times) {
      callback(result);
    }
  };
};
// 执行一次任务
const run = after(3, finishTask);
// 订阅任务
task.on("run", run);
/**
 * 任务 A ,耗时 1 秒
 */
const A = () => {
  setTimeout(() => {
    console.log("run task A");
    // 发布任务 A
    task.emit("run", "A", "taskA");
  }, 1000);
};
/**
 * 任务 B ,耗时 1.5 秒
 */
const B = () => {
  setTimeout(() => {
    console.log("run task B");
    // 发布任务 B
    task.emit("run", "B", "taskB");
  }, 1500);
};
/**
 * 任务 C ,耗时 2.5 秒
 */
const C = () => {
    setTimeout(() => {
      console.log("run task C");
      // 发布任务 C
      task.emit("run", "C", "taskC");
    }, 2500);
  };

A(); // 执行任务 A
B(); // 执行任务 B
C(); // 执行任务 C

相关文章

  • 多异步之间的协作

    《深入浅出 Node.js》阅读随笔 Node.js 的中发布/订阅模式,一般用于解决一次发布对应多次订阅的情况。...

  • 高并发(6)- 多线程之间的协作

    @[TOC](高并发(6)- 多线程之间的协作) 前言 线程的协作 一、什么是线程的协作顾名思义,线程的协作就是多...

  • 异步协作的讲义

    概述 异步协作(Asynchronous Collaboration),指借助某一媒介进行的非实时协作,发起一次协...

  • 团队协作的五大障碍及其在互联网企业中的思考

    一、团队协作特指什么? 这里的团队协作,是指跨多个团队之间的协作,而不是团队内成员之间的协作。 (注:...

  • Java编程的逻辑 -- 并发章 -- 线程的基本协作机制

    线程的基本协作协作的场景wait/notify 线程的基本协作示例生产者/消费者模式同时开始等待结束异步结果集合点...

  • Netty基础-JAVA IO模型

    java - IO模型 BIO NIO AIO 同步与异步,阻塞与非阻塞 同步与异步是面向多个线程协作的情况。 假...

  • 03-计算限制的异步操作(上)

    计算限制的异步操作(上) 一、协作式取消 .Net 对于视图取消操作的代码提供了标准的取消模式,称为协作式取消。 ...

  • [碎语杂记]191106分工协作

    分工协作是个普遍问题,同事之间,处室之间,单位之间,地区之间,国家之间,都涉及。 领导喜欢强调讲大局,讲协作。唯有...

  • 同步与异步

    背景 不仅仅是因为现在微服务架构盛行,之前的服务之间协作进行通信也面临这样的选择,到底用同步的方式还是用异步的方式...

  • es6 generator函数

    协程:多个线程互相协作,完成异步任务。 functionasnycJob(){ // ...其他代码varf=yi...

网友评论

    本文标题:多异步之间的协作

    本文链接:https://www.haomeiwen.com/subject/ojppoktx.html