每日一题 - 2019-09-02 - 【编程题】实现高阶函数combinedFetcher 
信息卡片 
- 时间:2019-09-02
- tag:编程题
问题描述 
A fetcher is
js
function fetcher(arg, cb){
	let res = fetch(arg);
	cb(res);
}function fetcher(arg, cb){
	let res = fetch(arg);
	cb(res);
}Write a higher-order function combinedFetcher, using callback to get all the fetched data.
E.g.
js
const fetchFruitsAndDrinks = combinedFetcher("fruits", "drinks");
fetchFruitsAndDrinks(console.log);const fetchFruitsAndDrinks = combinedFetcher("fruits", "drinks");
fetchFruitsAndDrinks(console.log);参考实现 
这其实是一道互联网大厂的面试真题,笔者也碰到过。
js
function fetch(arg) {
  return `response with: ${arg}`;
}
function fetcher(arg, cb){
	let res = fetch(arg);
	cb(res);
}
function combinedFetcher(...args) {
  const len = args.length;
  let cnt = 0;
  const res  = [];
  function innerCB(r, cb) {
    cnt++;
    res.push(r)
    if(cnt === len) cb(res);
  }
  return cb => args.forEach(arg => fetcher(arg, r => innerCB(r, cb)));
}
const fetchFruitsAndDrinks = combinedFetcher("fruits", "drinks");
fetchFruitsAndDrinks(console.log)function fetch(arg) {
  return `response with: ${arg}`;
}
function fetcher(arg, cb){
	let res = fetch(arg);
	cb(res);
}
function combinedFetcher(...args) {
  const len = args.length;
  let cnt = 0;
  const res  = [];
  function innerCB(r, cb) {
    cnt++;
    res.push(r)
    if(cnt === len) cb(res);
  }
  return cb => args.forEach(arg => fetcher(arg, r => innerCB(r, cb)));
}
const fetchFruitsAndDrinks = combinedFetcher("fruits", "drinks");
fetchFruitsAndDrinks(console.log)