有这么一个JS算法需求,希望帮忙实现下

var arr = [()=>{},()=>{}];

function Fn(arr){

//让数组中的函数依次执行。

}

Fn(arr)

阅读 2.6k
5 个回答

var arr = [()=>{},()=>{}];

async function run(arr){

    //让数组中的函数依次执行。
    var i;
    for(i=0;i<arr.length;i++){
        if(arr[i]) await arr[i]()
    }

}

run(arr)

保证在run 函数内,同步异步函数都可以按序执行

var arr = [()=>{},()=>{}];

function Fn(arr){

    //让数组中的函数依次执行。
    var i;
    for(i=0;i<arr.length;i++){
        arr[i]();
        //也可以这样 arr[i].call(null);
        //或者 arr[i].apply(null);
    }

}

Fn(arr)

这个是无返回值类型的,只保证函数执行,并不保证执行后返回值的处理,如果需要返回值,用map处理

// define
const __function_arr_ = [() => console.log('function one'), () => console.log('function two')]
// define
function Fn (__function_arr_) {
   __function_arr_.forEach(fn => fn())
}
// call
Fn(__function_arr_)

这个是带返回结果的

const __function_arr_ = [() => 'one', () => 'two']

function Fn(__function_arr_) {
   return __function_arr_.map(fn => fn())
}

console.log(Fn(__function_arr_))

这不能算是算法

谢谢大家,其实是在考察一种设计模式 叫中间件模式, 但是我用async 写的所以有点不满意, 不过还是谢谢大家的回答。

我给出的答案是这样的:

var arr = [() => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(1);
        }, 1000)
    })
}, () => {
    console.log(2)
}];

async function Run(arr) {
    let Result = await arr.splice(0, 1)[0]();
    console.log(Result, 222222)
    if (Result && arr.length) {
        Run(arr)
    }
}

Run(arr)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题