MST

星途 面试题库

面试题:JavaScript 装饰器模式下处理异步函数的增强

假设存在一个异步函数 `async function fetchData() { await new Promise(resolve => setTimeout(resolve, 1000)); return 'data'; }`,要求使用装饰器模式为该异步函数添加重试机制,当函数执行失败时,最多重试 3 次,每次重试间隔 1 秒,并在每次重试时打印重试次数。请用 JavaScript 实现该功能。
30.7万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
function retryDecorator(maxRetries = 3, delay = 1000) {
    return function (target, propertyKey, descriptor) {
        const originalMethod = descriptor.value;
        descriptor.value = async function (...args) {
            let retries = 0;
            while (retries < maxRetries) {
                try {
                    return await originalMethod.apply(this, args);
                } catch (error) {
                    retries++;
                    console.log(`重试次数: ${retries}`);
                    if (retries === maxRetries) {
                        throw error;
                    }
                    await new Promise(resolve => setTimeout(resolve, delay));
                }
            }
        };
        return descriptor;
    };
}

async function fetchData() {
    await new Promise(resolve => setTimeout(resolve, 1000));
    throw new Error('模拟错误');
}

const decoratedFetchData = retryDecorator()(fetchData, 'fetchData', { value: fetchData });

decoratedFetchData().catch(console.error);