<!-- 异步编程 ajax 定时器 回调里面套回调,层层嵌套,回调地狱-->
<!-- 解决方案:1.generator函数 2.Promise,3.async await -->
//定义一个Generator函数 function * 函数名(){}
//在Generator函数内部,通过yield关键字使函数分步执行 按照顺序执行
//yield相当于把代码拆分成代码块,每次执行一个代码块,然后程序挂起,等待上一个程序执行完再执行下一个
function * helloWorld(){
console.log("1");
yield "hello";
console.log("2");
yield "world";
console.log("3");
return "end"
}
var gen = helloWorld()
console.log(gen);
//使用next方法,分段执行Generator函数
console.log(gen.next());//next对应定义一个yield,暂停后续操作,yield后跟着的"hello"会作为value返回 done: false说明函数还没有执行完
console.log(gen.next());//value:"world",done:false
console.log(gen.next());//遇到return函数执行结束,value:"end",done:ture
//Generator函数是一个分段执行的过程,yield用来把函数挂起(暂停),next()恢复执行 yield和next一一对应
Generator函数例子
function a(){
$.ajax({
type: "get",
url: "./code.json",
dataType: "json",
success: function (res) {
console.log(res)
if(res.status == 200){//当状态码为200时允许请求data.json
it.next();//触发第一个yield,执行函数b
}else{
console.log("请求失败");
return
}
}
});
}
function b(){
$.ajax({
type: "get",
url: "./data.json",
dataType: "json",
success: function (res) {
console.log(res)
//渲染
}
});
}
//定义一个generator函数
function * req(){
yield a();
yield b();
}
p.then((res)=>{
b()
}),(error) =>{//失败回调
console.log(error)
}