JavaScript实现串行请求的示例代码
使用async和await
varfn=asyncfunction(promiseArr){ for(leti=0,len=arr.length;iPromise实现
依照promises规范,一旦一个promise被创建,它就被执行了。如果then方法里返回的是一个promise对象,那么执行下一个then的时候必定是在上一个then执行完之后执行。
关键点在于then的时候再创建
varcreatePromise=function(time){ return(resolve,reject)=>{ returnnewPromise((resolve,reject)=>{ setTimeout(()=>{ console.log('timein'+time) resolve(); },time*1000) }) } } functionserpromise(arr){ arr.reduce((pre,next,index,carr)=>{ returnpre.then(next) },Promise.resolve()) } vararr=[createPromise(2),createPromise(1),createPromise(3),createPromise(4),createPromise(5)]; //相当于 //Promise.resolve().then(createPromise(2)).then(createPromise(1))...... serpromise(arr)Array.prototype.reduce+async/await版本
constreduceAsync=(arr)=>{ arr.reduce(async(prev,curr)=>{ const{rep}=awaitprev; constobj=awaitpromise(curr,rep); console.log(obj); returnobj; },Promise.resolve({})); };Array.prototype.reduce+Promise版本
constreducePromise=(arr)=>{ arr.reduce((prev,curr)=>{ returnprev.then(data=>{ returnnewPromise((resolve,reject)=>{ promise(curr,data.rep).then(res=>{ console.log(res); resolve(res); }); }); }); },Promise.resolve({})); };#执行结果
{req:'PM:04:49:08',rep:'PM:04:49:11',item:1}
{req:'PM:04:49:11',rep:'PM:04:49:14',item:2}
{req:'PM:04:49:14',rep:'PM:04:49:17',item:3}
{req:'PM:04:49:17',rep:'PM:04:49:20',item:4}
Array.prototype.map+Promise版本
constmapPromise=(arr)=>{ lettemporary=Promise.resolve({}); arr.map((item,index)=>{ temporary=temporary.then((data)=>{ if(i!==0){ //第一个初始promise console.log(data); } returnpromise(item,data.rep); }); }); //最后一个promise temporary.then(data=>console.log(data)); };用map遍历时,需要过滤初始promise的返回值,并且在遍历结束后,需手动执行最后以后一个promise,否则就会变成如下结果
#执行结果
{}
{req:'PM:04:49:08',rep:'PM:04:49:11',item:1}
{req:'PM:04:49:11',rep:'PM:04:49:14',item:2}
{req:'PM:04:49:14',rep:'PM:04:49:17',item:3}以上结果明显不是我们所需要的,但是需要手动过滤第一个promise和执行最后一个promise,会增项不必要的代码量和出错率后将mapPromise修改如下,其原理和Array.prototype.reduce+Promise版本类似
constmapPromise=(arr)=>{ lettemporary=Promise.resolve({}); arr.map((item,index)=>{ temporary=temporary.then((data)=>{ //if(i!==0){ ////第一个promise //console.log(data); //} returnnewPromise((resolve,reject)=>{ promise(item,data.rep).then(data=>{ console.log(data); resolve(data); }); }); }); }); //最后一个promise //temporary.then(d=>console.log(d)); };其他
Array.prototype.forEach、Array.prototype.filter、Array.prototype.some、Array.prototype.every等方法和Array.prototype.map类似,就不过多赘述
以上就是JavaScript实现串行请求的示例代码的详细内容,更多关于JavaScript实现串行请求的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。