设计思路
- 类型定义:首先为每个 API 的输入和输出定义明确的 TypeScript 类型,以确保类型安全。
- 异步操作管理:使用
async/await
来处理异步操作,这样代码看起来更像是同步代码,提高可读性。同时结合 Promise
来处理多个 API 调用之间的依赖关系。
- 错误处理:使用
try/catch
块来捕获 API 调用过程中可能出现的错误,并进行适当的处理。
- 可维护性和扩展性:将每个 API 调用封装成独立的函数,这样如果 API 发生变化,只需要修改对应的函数。如果有新的 API 依赖,也容易在现有代码基础上进行扩展。
关键代码示例
// 定义API输入输出类型
type Api1Response = {
data: string;
};
type Api2Request = {
param: string;
};
type Api2Response = {
result: number;
};
// 模拟API调用函数,这里用setTimeout模拟异步操作
async function api1(): Promise<Api1Response> {
return new Promise((resolve) => {
setTimeout(() => {
resolve({ data: 'example data' });
}, 1000);
});
}
async function api2(request: Api2Request): Promise<Api2Response> {
return new Promise((resolve) => {
setTimeout(() => {
resolve({ result: request.param.length });
}, 1000);
});
}
// 处理多个API调用的函数
async function fetchData(): Promise<Api2Response> {
try {
const api1Result = await api1();
const api2Request: Api2Request = { param: api1Result.data };
const api2Result = await api2(api2Request);
return api2Result;
} catch (error) {
// 处理错误
console.error('Error fetching data:', error);
throw error;
}
}
// 使用示例
fetchData().then(result => {
console.log('Final result:', result);
}).catch(error => {
console.error('An error occurred:', error);
});