1、先看一段简单的代码:functiondelayMsg(id){setTimeout(function(){return'序列号:'+id;},2000);}functionfetchData(){vararr=[1,2,3,4]var数据列表=[];arr.forEach(function(id){varitem={msg:delayMsg(id)}});console.log(dataList);}fetchData();delayMsg是一个针对异步操作,按照同步->异步->回调的顺序,很明显打印出来的结果dataList是一个空数组。那么如何修改代码在fetchData函数中获取正确的数据呢?2.使用CO模块varco=require('co');functiondelayMsg(id){returnnewPromise(function(resolve,reject){setTimeout(function(){resolve('序列号:'+id);},3000);});}co(function*fectchData(){vardalaList=[]for(vari=0;i<4;i++){varmsg=yielddelayMsg(i);dalaList.push({味精:味精});}console.log(dalaList);});3.使用asyncconstdelayMsg=id=>{returnnewPromise((resolve,reject)=>{setTimeout(function(){resolve('序列号:'+id);},2000);})}asyncfunctionfetchData(){vardataList=[];vararr=[1,2,3,4];for(valofarr){varitem={msg:awaitdelayMsg(val)}dataList.push(item);}console.log(dataList);}据说比Promise好。采用ES7语法,使用前需要引入Babel模块。/等待
