谢谢阮老师的ES6!
16.generator函数的语法
10.(1)异步操作的同步化表达
=======================分割线=======================
通过generator函数部署ajax操作,用同步的方式表达
1.makeAjaxCall函数
//忽略浏览器兼容性
function makeAjaxCall(url,callback){
console.log("开始向"+url+"进行异步请求");
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
console.log("回调开始");
callback(xmlhttp.responseText);
}
}
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}
2.request函数
function request(url){
makeAjaxCall(url, function(response){
console.log(response);
it.next(response);
});
}
3.generator函数
function* main(){
var result = yield request("http://localhost:8888/initRecords.action");
alert(result);
}
var it=main();
总结:
异步的同步表达。如果在makeAjaxCall使用同步请求open(,,false),则报错Generator is already running。应该是因为同步的状态下,前一次的next没执行完,所以无法启动下一次next吧。