前端面试题

发车函数(callback取值)

2019-04-01  本文已影响0人  千茉紫依

黄小明是老司机了,他每天任务就是送一群人去上班。但是每天送的人数不一样,这些人上车的时间也不一样。小明总是要等到人齐才能开车。

完成函数 driveCustomers,它接受不定数量的参数,这是参数都是函数,每个函数代表一个人。这些函数都接受一个回调函数作为参数,当回调函数被调用的时候说明这个人已经上车了,回调函数会被传入人名。例如:

const MissLi = (callback) => {
  setTimeout(() => {
    callback('MissLi')
  }, 10) // 上车时间不一定
}

const MrWang = (callback) => {
  setTimeout(() => {
    callback('MrWang')
  }, 3) // 上车时间不一定
}

// ..

driveCustomers(MissLi, MarWang, ...)

请你完成 driveCustomers 函数,它的作用是:当人都到齐以后,按上车的时间顺序把人名放到一个数组里面然后传给 drive 函数,正式开车。例如:drive(['MrWang', 'MissLi'])。

你只需要完成 driveCustomers 函数,drive 函数已经可以直接使用。

答案
这个题目我主要卡在对callback的处理上,这里callback(name)使用(name)=>{ resolve(r.push(name)) }函数对其重新定义, 当setTimeout中的callback执行时,会把name值动态加载过来,在外部数组r中进行保存后然后返回,这样我们得到了一个关于fn的Promise链,当其在Promise.all执行完毕后,就得到了满足条件的r

    const driveCustomers =async (...args) => {
            let r=[]
            let upArr = args.map(fn => {
                return new Promise((resolve, rej) => {
                    fn((name)=>{
                       resolve(r.push(name))
                    })
                });
            });
            await Promise.all(upArr)
            return drive(r)
        };
上一篇 下一篇

猜你喜欢

热点阅读