Generator函数到底有什么用

在了解Generator函数的时候,发现看完Generator函数知道了写法,知道了含义,但是它到底是怎样解决异步的,到底好在哪,灵活在哪,经过好长时间的消化,才算是摸清了点头绪。

再看资料的时候,总会看到这样一句话Generator 函数是 ES6 提供的一种异步编程解决方案,异步编程的解决方案是指在写代码层面上,解决了以往的回调套回调的噩梦,包括promise也一样,还有ES7里的async/await,都是在写的时候对我们理解更友好,说俗了,因为我们习惯了,从上到下写代码,一行代码一行代码的按顺序解析。

那么Generator也一样,什么next,什么yeild给我们了这么多东西我们到底要用来干嘛呢:
看下面代码:

function* generatorText(){
	const result = yield ajax("www.url.com");
	const res = JSON.pase(result).value;
	console.log(res)
}

function ajax(url){
	asyncAjax(url,(res)=>(
		f.next(res)
	))
}
const f = generatorText();
f.next()

这里在generatorText函数中我们就实现了,代码从上而下执行,打印出异步请求的数据了。

Generator函数是一种特殊的函数,它是一个状态机,可以暂停执行并在需要时恢复执行。Generator函数的定义使用function关键字和一个星号(*),内部使用yield表达式来定义不同的内部状态。调用Generator函数后,函数并不会立即执行,而是返回一个指向内部状态的指针对象。通过调用这个指针对象的next()方法,可以逐步执行Generator函数内部的代码,并返回每个阶段的值和是否执行完毕的状态。 在Generator函数内部,可以使用yield*表达式来执行另一个Generator函数yield*表达式可以将执行权交给另一个Generator函数,并在其执行完毕后再返回执行权给当前Generator函数Generator函数的数据交换可以通过调用next()方法传入参数来实现。在Generator函数内部,可以使用yield表达式来接收传入的参数,并返回相应的值。每次调用next()方法时,传入的参数会作为上一个阶段异步任务的返回结果,被函数体内的变量接收。 总结来说,Generator函数是一种特殊的函数,可以暂停执行并在需要时恢复执行。它通过yield表达式来定义不同的内部状态,并通过next()方法来逐步执行和控制函数的执行流程。yield*表达式可以在一个Generator函数内部执行另一个Generator函数。数据交换可以通过调用next()方法并传入参数来实现。 #### 引用[.reference_title] - *1* *3* [es6中的generator函数详解](https://blog.youkuaiyun.com/weixin_43638968/article/details/105475881)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Generator函数](https://blog.youkuaiyun.com/qq_43239667/article/details/123984997)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值