2024年9月24日 面试
—、题目1
1.代码
// 响应拦截
http.interceptors.response.use(
(response) => {
// 如果是下载,直接返回
if (response.config.method === 'DOWNLOAD') {
return response;
}
const resData = response.data;
const resCode = resData.code;
// 正常放行
if (resCode == 0 || resCode == 6001 || resCode == 400 || resCode == 4001 || resCode == 7001) {
return resData;
}
return Promise.reject(resData);
},
(error) => {
return Promise.reject(error);
}
);
2.问题
return Promise.reject(resData);中Promise是什么,为什么要Promise.reject实现他的什么样的功能?没有Promise.reject为什么不能实现?
3.解答
Promise是一个构造函数,其原型上有 then、catch方法,还有reslove,reject等静态方法。通过创建Promise实例,可以调用Promise.prototype上的then、catch方法。
Promise能够将异步操作最终成功返回值或者失败原因和相应的处理程序关联起来。 这样使得异步方法可以像同步方法那样返回值:异步方法并不会立即返回最终的值,而是会返回一个 Promise,以便在未来某个时候把值交给使用者。
简单来说就是:使异步方法也能够根据其操作最终结果是成功还是失败的具体情况绑定不同的后续处理事件
当响应的状态码不符合预期时,使用`Promise.reject()`将返回一个被拒绝的Promise对象。这意味着在使用该拦截器时,如果返回的状态码不是0、6001、400、4001或7001,那么拦截器会返回一个被拒绝的Promise,并将错误传递给调用链中的下一个拦截器或者catch回调函数。
如果没有使用`Promise.reject()`,而是直接返回错误对象或者抛出一个错误,那么拦截器会认为响应是成功的,Promise链将会继续执行。这可能导致后续处理不符合预期的响应数据,从而引发潜在的问题。
通过使用`Promise.reject()`,我们可以有效地中断Promise链,并且通过调用`catch()`方法来处理拦截器返回的拒绝Promise。这样可以更好地处理错误情况,并且能够更好地控制和处理代码的执行流程。
二、题目2
1.代码
export const uploadFile = async (filePath: string, fileName: string): Promise<{ uuid: string, fileType: string }> => {};
2.问题
async (filePath: string, fileName: string): Promise<{ uuid: string, fileType: string }>从async开始解释这段函数每个的意思
3.解答
`async`关键字用于声明一个函数是异步的,意味着函数将返回一个Promise对象。
`(filePath: string, fileName: string)` 是函数的参数列表,其中 `filePath` 和 `fileName` 是函数的输入参数,它们的类型都被指定为字符串。
`Promise<{ uuid: string, fileType: string }>` 是该函数的返回类型,表示该函数将返回一个Promise对象,当Promise对象被解析时,它将包含一个具有 `uuid` 和 `fileType` 属性的对象。
整个函数的功能是在异步操作中执行某些操作,并返回一个包含 `uuid` 和 `fileType` 属性的对象。
三、题目3
1.题目
什么是回调函数?
2.解答
回调函数是一种函数,它作为参数传递给另一个函数,并且在某个事件发生或异步操作完成后被调用。回调函数允许我们在异步操作完成后执行相应的代码,以处理结果或执行其他操作。
在JavaScript中,回调函数通常用于处理异步操作,比如定时器、网络请求、文件读写等。当异步操作完成后,会调用回调函数来处理结果或执行其他操作。
回调函数的使用可以实现非阻塞的异步编程模型,因为它允许代码在等待异步操作完成时继续执行其他任务,而不会阻塞当前线程。
//以下是一个简单的例子,演示了使用回调函数处理异步操作的方式
function fetchData(callback) {
setTimeout(() => {
const data = 'Hello, World!';
callback(data);
}, 2000);
}
function processData(data) {
console.log('Received data:', data);
}
fetchData(processData);
fetchData 函数是一个模拟的异步操作,它在2秒后返回数据。processData 函数是回调函数,它会在异步操作完成后被调用,并处理返回的数据。
通过使用回调函数,我们可以在异步操作完成后执行相应的代码,以确保数据的正确处理和程序的正确执行顺序。
评论区