美文网首页
生成器 & 异步任务

生成器 & 异步任务

作者: bestCindy | 来源:发表于2022-03-03 23:04 被阅读0次

我们用生成器模拟一个方法

这个方法可以用同步的方式处理异步,也就是类似 async await

function* task(url) {
  const d = yield 1;
  const resp = yield fetch(url);
  const result = yield resp.json();
  console.log(result);
}

run(task);

function run(generatorFunc) {
  const generator = generatorFunc();
  // 启动任务(开始迭代)
  let result = generator.next();
  handleResult(result);

  function handleResult(result) {
    if (result.done) {
      return;
    };
    // 迭代没有完成,分两种情况
    // 1. 迭代数据是一个 Promis
    // 2. 迭代数据是其他数据
    if (typeof result.value.then === 'function') {
      // 1. 迭代数据是一个 Promise
      // 等待 Promise 完成后,再进行下一次迭代
      result.value.then(data => {
        result = generator.next(data);
        handleResult(result);
      });
    } else {
      // 2. 迭代的数据是其他数据,直接进行下一次迭代
      result = generator.next(result?.value);
      handleResult(result);
    };
  }
}

相关文章

  • 生成器 & 异步任务

    我们用生成器模拟一个方法 这个方法可以用同步的方式处理异步,也就是类似 async await

  • 你不知道的JavaScript(中卷)|生成器(二)

    异步迭代生成器回想一下回调方法: 如果想要通过生成器来表达同样的任务流程控制,可以这样实现: 在yield foo...

  • 详解generator(二)——异步、委托和并发

    异步迭代生成器 先看一个例子,用于控制异步流程的暂停阻塞 同步错误处理 从生成器向外抛出错误: 手动通过throw...

  • tornado协程的工作原理

    包含yield语句的函数是一个生成器。所有的生成器都是异步的。当我们调用生成器函数的时候,生成器函数返回一个生成器...

  • Android回顾--(八) 异步任务、Handler通信

    异步任务: 什么是异步任务?一切使用多线程完成的任务均可以称为异步任务-->使用线程来完成任务。 异步任务的优缺点...

  • 一次性能调优总结

    批量任务和异步任务,批量任务采用分发方式,批量任务生产异步任务。总的情况是批量任务的生产速度大于异步任务的消耗速度...

  • 异步任务

    需求: 同样的任务,启动多次,多个异步任务(比如3个)按照顺序(A,B,C)分别启动,只保留最后一个任务的结果。 ...

  • springboot之异步方法

    异步任务 Configuration配置: 需要@EnableAsync注解开启异步功能。spring异步任务是通...

  • java多线程(核心篇)第九章

    第九章 Java异步编程 9.1 同步计算与异步计算 以异步方式执行的任务,称之为异步任务,其任务的发起与任务的执...

  • 你不知道JS:异步(翻译)系列4-2

    你不知道JS:异步 第四章:生成器(Generators) 接上篇4-1 生成器委托(Generator Dele...

网友评论

      本文标题:生成器 & 异步任务

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