面试题答案
一键面试// 假设特定处理函数,提取某个字段
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
函数无副作用)的特点。