【ES6】浅谈Generator和yield

本文深入探讨了ES6中的Generator和yield,包括它们如何解决异步编程问题,Generator函数的特性,yield表达式的用法,以及如何通过next方法控制执行流程。通过实例解析了Generator如何按顺序执行任务,以及next方法参数的影响。
摘要由CSDN通过智能技术生成


前言

问题发生在一个下午,当我正在实现Promise.all()方法的时候(有兴趣的可以去我另一篇博客看一看:深入透析Promise的all和race方法),发现for循环里的函数并不是同步执行的,那么我如果想让它同步执行该怎么办呢?

大家先来看一下这道题:

for(let i = 0;i < 5;i++) {
      if(i === 1) {
        setTimeout(() => {
          console.log(i);
        }, 0);
      }else {
        console.log(i);
      }
    }

执行结果:
在这里插入图片描述
这里便是宏任务与微任务的问题啦,不懂的同学可以去看一下事件循环知识哦!

我们发现1被推到了最后才去执行,那么我就想让他同步执行,也就是按顺序执行该怎么办呢?

  • 思路一:给函数包一层Promise,然后用async await使其同步执行。(这样还得给它而外包裹一层promise,不是多次一举吗?)
  • 思路二:使用Generator

话不多说,让我们一起来看一看吧

一、async await实现

async await和promise的内容本文就不具体讲了,直接上代码!

const promise= (i) => new Promise((resolve,reject) => {
      setTimeout(() => {
        // 此处resolve目的是为了让promise结束,否则await将一直等待
         resolve()
         console.log(i);
        }, 0);
    })
    ~(async (resolve,reject) => {
      for(let i = 0;i < 5;i++) {
        if(i === 1){
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值