Generator函数

Generator函数(迭代器的生产函数)

1.定义:异步编程的解决方案,将异步操作同步化,解决:查询完顾客信息再查询订单信息,再Redux-saga中广泛应用
2.特征:function于函数名中有个*,函数体内部用yield,表示产出
3.声明:

function* method_name(){
	yield xxx
	yield xxx
}

4.yield表达式
只能出现在generator函数中
yield 值
yield 函数的调用
默认情况下yield表达式的返回值为undefined
5.调用

let one method_name();
//generator调用的解构为迭代器
one.next();//每次调用next方法,可以依次获取每个yield值

6.Generator函数的应用
可以生成迭代器对象

let obj = {"0":"tom","1":"one"}
obj[Symbol.iterator]=[][Symbol.iterator]
obj[Symbol.iterator]=迭代器的生成函数

7.Generator中this的指向

利用Generator函数实现异步操作的同步化

function* foo(){
	let customers = yield call($.get,c_url)
	let order = yield call($.get,a_url)
}

异步函数的执行器(在上一个请求结束后再去调用下一个请求,将当前娥请求结果返回作为yield表达式的返回值返回)

function call(handler,url){
	handler(url)
	.then((response)=>{
		iterator.next(response)
	})
}

可以依次拿到两个值,但是耦合性极强

Async函数

Async函数是Generator的语法糖
对于Generator函数的简化和功能强化

async function foo(){
	let comster = await $.get(c_url)
	return[]
}
let promise = foo();
Promise.then((result)=>{
	//result为foo函数的返回值
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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.csdn.net/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.csdn.net/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、付费专栏及课程。

余额充值