猿问

异步函数顺序执行以及数组处理的一个小问题

题目描述
两个异步的函数,要求写一个函数asyncOneByOne(arr)能够顺序执行输入的参数
asyncOneByOne([one,two])
//输出
//first
//second
functionone(callback){
setTimeout(function(){
console.log('first');
callback&&callback();
},200);
}
functiontwo(callback){
setTimeout(function(){
console.log('second');
callback&&callback();
},0);
}
题目来源及自己的思路
一道笔试题,一开始还以为要用到promise什么的,但是one()two()不让更改了然后发现其实只要one(two(one(two)))这样执行就可以(看了回调函数那一章)
你期待的结果是什么?实际看到的错误信息又是什么?
这样问题就变成了输入一个数组[one,two,one,two],如何变成one(two(one(two)))这样并且执行的问题了,但是这里反而糊掉了,请教各位应该如何处理.
胡子哥哥
浏览 532回答 2
2回答

子衿沉夜

asyncOneByOne([one,two,one,two]);//输出//first//secondfunctionasyncOneByOne(arr){varlen=arr.length;vars=arr[len-1];for(vari=len-2;i>=0;i--){s=(function(x){varm=s;returnfunction(){arr[x](m);}})(i)}s();}functionone(callback){setTimeout(function(){console.log('first');callback&&callback();},200);}functiontwo(callback){setTimeout(function(){console.log('second');callback&&callback();},0);}

噜噜哒

functionasyncOneByOne(params){if(params.length){params[0](()=>{asyncOneByOne(params.splice(1));});}}asyncOneByOne([one,two,one,two,two])
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答