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函数的返回值
})