ES6——生成器解决回调地狱

简介: 生成器解决回调地狱

生成器一般用于解决回调地狱

生成器写法:function *(){}

函数名前面有一个*

调用next()方法开始执行函数

yield为暂停

yield 它有两个属性,value和done,分别代表返回值和是否完成。

使生成器函数执行暂停,yield关键字后面的表达式的值返回给生成器的调用者。它可以被认为是一个基于生成器的版本的return关键字

例:

function * gen(){
    console.log('My name is NanChen');
    }
    let iterator = gen()
    iterator.next()    //开始执行

打印效果:

20211008160308480.png

例2:

<script>
        function * gen() {
            console.log('--- 1 ---');
            yield 'eye'        // 使生成器函数执行暂停
            console.log('--- 2 ---');
            yield 'nose'
            console.log('--- 3 ---');
            yield 'head'
        }
        for(let item of gen()){
            console.log(item);
        }
    </script>

打印效果:

20211008160803595.png

回调地狱:经常因为某些逻辑导致写出一层嵌套一层的回调函数,如果嵌套的很多,将会极大的影响到代码逻辑和可读性,这种代码就被成为回调地狱。

例:

setTimeout(() => {
    console.log(111)
    setTimeout(() => {
      console.log(222)
      setTimeout(() => {
      console.log(333)
      }, 3000)
    }, 2000)
    }, 1000)

解决方法:把每层嵌套单独拿出来

function one(){
    setTimeout(()=>{
      console.log('111');
      iterator.next()
    },1000)
    }
    function two(){
    setTimeout(()=>{
      console.log('222');
      iterator.next()
    },2000)
    }
    function three(){
    setTimeout(()=>{
      console.log('333'); 
    },3000)
    }
    function * gen(){
    yield one()
    yield two()
    yield three()
    }
    let iterator = gen()
    iterator.next()

实现效果如下图:

76a1bcf4be624b40b55c5a79a9a24ffc.gif


相关文章
|
7月前
|
JavaScript 前端开发
js开发:请解释什么是ES6的async/await,以及它如何解决回调地狱问题。
ES6的async/await是基于Promise的异步编程工具,简化了代码并提高可读性。它避免回调地狱,将异步操作转化为Promise,使得代码同步化。错误处理更直观,无需嵌套回调或.then()。
55 1
|
7月前
|
前端开发 JavaScript 程序员
|
6月前
|
前端开发 JavaScript 开发者
JavaScript中的异步操作与回调地狱解决方法
JavaScript中的异步操作与回调地狱解决方法 在现代的Web开发中,JavaScript扮演着极为重要的角色,尤其是在处理网络请求、文件操作或者任何可能耗费时间的操作时。为了不阻塞程序的执行,JavaScript 提供了异步编程模型。本文将介绍JavaScript中的异步操作是什么,什么是回调地狱,以及如何解决回调地狱问题。 什么是异步操作? 异步操作指的是那些不会立即完成的操作,程序可以在等待异步操作完成的同时,继续执行其他代码。JavaScript通常使用事件循环机制处理异步操作,这使得它可以在不阻塞主线程的情况下执行任务。 常见的异步操作包括: 网络请求(如使用 XMLHt
47 2
|
7月前
|
前端开发 JavaScript
在JavaScript中,如何处理回调地狱问题
为解决回调地狱问题,可以采取三种策略:1) 使用命名函数,将回调函数提取为独立函数,减少嵌套;2) 采用Promise的链式调用,清晰组织异步操作并统一错误处理;3) 使用ES8的async/await,编写近似同步的异步代码,提高可读性和错误处理效率。这些方法能提升代码的可读性和可维护性。
|
7月前
|
前端开发 JavaScript
js开发:请解释Promise是什么,以及它如何解决回调地狱(callback hell)问题。
Promise是JavaScript解决异步操作回调地狱的工具,代表未来可能完成的值。传统的回调函数嵌套导致代码难以维护,而Promise通过链式调用`.then()`和`.catch()`使异步流程清晰扁平。每个异步操作封装为Promise,成功时`.then()`传递结果,出错时`.catch()`捕获异常。ES6的`async/await`进一步简化Promise的使用,使异步代码更接近同步风格。
99 1
|
7月前
|
前端开发 JavaScript 数据库
JavaScript基础知识:解释一下回调地狱(Callback Hell)。
JavaScript基础知识:解释一下回调地狱(Callback Hell)。
338 1
|
7月前
|
前端开发 JavaScript
用原生JavaScript(ES5)来实现Promise的等效功能(异步回调)
用原生JavaScript(ES5)来实现Promise的等效功能(异步回调)
|
7月前
|
JavaScript 前端开发
|
前端开发
前端学习案例1-aysnc和await之co+生成器1
前端学习案例1-aysnc和await之co+生成器1
93 0
前端学习案例1-aysnc和await之co+生成器1
|
前端开发
前端学习案例2-aysnc和await之co+生成器2
前端学习案例2-aysnc和await之co+生成器2
84 0
前端学习案例2-aysnc和await之co+生成器2