MST

星途 面试题库

面试题:JavaScript 函数式编程在异步场景的应用

在 JavaScript 中,我们经常会遇到异步操作,比如使用 `fetch` 获取数据。请使用函数式编程的理念,设计一个模块,实现如下功能:通过 `fetch` 多次请求不同的 API 接口(假设接口返回 JSON 数据),对每次请求返回的数据进行特定处理(例如提取某个字段),最后将所有处理后的数据汇总并以特定格式返回。要求代码体现函数式编程的特点,如不可变数据、纯函数等。
48.4万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
// 假设特定处理函数,提取某个字段
const extractField = field => data => data[field];

// 封装fetch请求,返回Promise
const fetchData = url =>
  fetch(url)
  .then(response => response.json())
  .catch(error => {
      console.error(`Fetch error for ${url}:`, error);
      return null;
    });

// 组合函数,多次请求并处理数据
const fetchAndProcess = (urls, field) => {
  const processData = extractField(field);
  return Promise.all(urls.map(url => fetchData(url).then(processData)))
  .then(results => results.filter(result => result!== null));
};

// 使用示例
const urls = ['api1.com', 'api2.com', 'api3.com'];
const fieldToExtract = 'key';
fetchAndProcess(urls, fieldToExtract)
  .then(processedData => {
      console.log('Processed and aggregated data:', processedData);
    });

上述代码首先定义了一个用于提取特定字段的纯函数 extractField,然后封装了 fetch 请求为 fetchData 函数,该函数返回 Promise 并处理可能的错误。接着,fetchAndProcess 函数利用 Promise.all 并发处理多个请求,并将处理后的数据汇总,过滤掉因请求错误而返回的 null 值。整个过程体现了函数式编程中不可变数据(没有对原数据进行修改)和纯函数(extractField 函数无副作用)的特点。