面试题答案
一键面试// 模拟异步数据源函数,返回Promise
function asyncDataSource1(): Promise<number> {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(1);
}, 1000);
});
}
function asyncDataSource2(): Promise<number> {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(2);
}, 1500);
});
}
function asyncDataSource3(): Promise<number> {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('模拟错误'));
}, 2000);
});
}
// 定义一个生成器函数,返回异步迭代器
function* asyncDataGenerator() {
yield asyncDataSource1();
yield asyncDataSource2();
yield asyncDataSource3();
}
// 异步遍历函数
async function asyncTraversal() {
const asyncIterator = asyncDataGenerator();
let result;
while (true) {
const { value, done } = asyncIterator.next();
if (done) break;
try {
result = await value;
console.log('处理结果:', result);
} catch (error) {
console.error('处理错误:', error);
}
}
}
asyncTraversal();
上述代码中:
- 首先定义了几个模拟的异步数据源函数
asyncDataSource1
、asyncDataSource2
、asyncDataSource3
,它们返回Promise
。 - 接着使用生成器函数
asyncDataGenerator
来生成一个异步迭代器,将所有异步数据源包装到迭代器中。 - 最后通过
asyncTraversal
函数来进行异步遍历,在遍历过程中使用try...catch
块来捕获可能出现的错误。