Promise,yield,异步回调
function showHint(str){ return new Promise(function(reslove, reject){ var xmlhttp; xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange=function(){ if (xmlhttp.readyState==4 && xmlhttp.status==200){ reslove(); } } xmlhttp.open("GET","http://d.alipay.net/xyebzdzr/serivce.htm",true); xmlhttp.send(); }) } //两个ajax 连续调用 //showHint().then(showHint).then(function(){console.log(2)}); //进一步封装 个个模块解耦 function showHint(){ return new Promise(function(reslove, reject){ var xmlhttp; xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange=function(){ if (xmlhttp.readyState==4 && xmlhttp.status==200){ reslove(xmlhttp.statusText); } } xmlhttp.open("GET","http://d.alipay.net/xyebzdzr/serivce.htm",true); xmlhttp.send(); }) } var request = { a : function(){ return showHint().then(function(val){return val}); }, b : function(){ return showHint().then(function(val){return val}); } } //两个ajax 同时发起请求 但必须满足两个都完成 才触发 function main(){ return Promise.all([request.a(), request.b()]); } /*main().then(function(value){ console.log(value); })*/ //yield 加入战场 var requests = { a : function(){ return showHint().then(function(val){return val}); }, b : function(){ return showHint().then(function(val){return val}); } } function* run(){ yield requests.a(); yield requests.b(); } function iterator(g){ var it = g(); void function () { var arg = arguments; var curr = it.next(); if(curr.done) { return ; } if(curr.value instanceof Promise) { curr.value.then(function(val){ console.log(val); arg.callee(); }); } else { arguments.callee(); } }(); } iterator(run)
切忌浮躁