使用生成器简单实现异步任务链式调用

181 阅读1分钟

tip:本文仅是本人是学习过程中记录的文章,水平非常有限,内容可能存在许多错误,还请大家指正

// 依次获取用户信息,订单信息,商品信息
      function getUser() {
      // 使用定时器模拟异步任务
        let timer = setTimeout(() => {
          let data = "用户信息";
          clearTimeout(timer);
          // next里的内容会被yield接收到
          ite.next(data);
        }, 1000);
      }
      function getOrder() {
        let timer = setTimeout(() => {
          let data = "订单信息";
          clearTimeout(timer);
          ite.next(data);
        }, 1000);
      }
      function getProduct() {
        let timer = setTimeout(() => {
          let data = "商品信息";
          clearTimeout(timer);
          ite.next(data);
        }, 1000);
      }
      function* ge() {
        let users = yield getUser();
        // 输出users
        console.log(users);
        let orders = yield getOrder();
        console.log(orders);
        let products = yield getProduct();
        console.log(products);
      }
      const ite = ge();
      // 启动
      ite.next();
      // 执行结果:
      // 一秒后输出: 用户信息
      // 一秒后输出: 订单信息
      // 一秒后输出: 商品信息