MST
星途 面试题库

面试题:TypeScript生成器函数在异步场景中的应用

假设你有一个需要按顺序异步获取数据的场景,比如依次从API获取用户信息、用户订单、订单详情。请用TypeScript生成器函数来实现这个流程,每个异步操作模拟使用 `setTimeout` 来延迟1秒,并处理可能出现的错误。
50.7万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
function* asyncDataFlow() {
    try {
        yield new Promise((resolve) => {
            setTimeout(() => {
                // 模拟获取用户信息成功
                console.log('获取用户信息成功');
                resolve({ user: 'userInfo' });
            }, 1000);
        });

        yield new Promise((resolve) => {
            setTimeout(() => {
                // 模拟获取用户订单成功
                console.log('获取用户订单成功');
                resolve({ order: 'orderInfo' });
            }, 1000);
        });

        yield new Promise((resolve) => {
            setTimeout(() => {
                // 模拟获取订单详情成功
                console.log('获取订单详情成功');
                resolve({ orderDetail: 'orderDetailInfo' });
            }, 1000);
        });
    } catch (error) {
        console.error('发生错误:', error);
    }
}

const gen = asyncDataFlow();
let result = gen.next();
while (!result.done) {
    result.value.then(data => {
        console.log('获取的数据:', data);
        result = gen.next();
    }).catch(error => {
        console.error('发生错误:', error);
        result = gen.throw(error);
    });
}