1,一个函数接受两个参数,第一个是数组,第一个是回调函数。需要实现以下功能。
fn([
function(callback) {
console.log('开始执行顺序执行!')
callback(null, 'hello', 'world');
},
function(arg1, arg2, callback) {
//arg1的值是'hello' arg2的值是'world'
console.log(arg1,arg2)
callback(null, 'miya');
},
function(arg1, callback) {
// arg1 的值是'three'
console.log('miya')
callback(null, 'done');
}
], function (err, result) {
console.log(result)
// 输出数组的最后一个函数回调的参数值
});
//以下是输出的结果
------------------------
'开始执行顺序执行!
hello world
miya
done
-------------------------
- 第一个参数是:数组要要运行的异步函数数组,每个函数都应该包含任意参数值。这些参数值将按顺序作为参数传递给下一个任务。也就是说数组中的每个函数将结果传递给数组中的下一个
- 第二个参数是 所有功能完成后运行的可选回调。这将传递最后一个任务的回调结果
参考示例(写的挺简洁的):
const fn = (task = [],callback = function(){}) => {
if(!Array.isArray(task)){
return callback(new Error('task should be an array!'));
}
(function next(...args){
if(task.length){
let fn = task.shift();
fn.apply(null,[...args.slice(1),next]);
}else{
callback.apply(null,args);
}
})()
}