MST
星途 面试题库

面试题:JavaScript在Node中处理复杂异步任务依赖关系

假设你在Node.js项目中有一系列异步任务,任务B依赖任务A的结果,任务C依赖任务B和另一个独立任务D的结果,任务E依赖任务C和任务F的结果。请用JavaScript代码实现这个异步任务流,要求使用Promise或async/await来处理异步操作,并确保代码的可读性和可维护性。
13.1万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
function taskA() {
    return new Promise((resolve) => {
        setTimeout(() => {
            console.log('Task A completed');
            resolve('Result of A');
        }, 1000);
    });
}

function taskB(resultA) {
    return new Promise((resolve) => {
        setTimeout(() => {
            console.log('Task B completed');
            resolve(`Result of B with ${resultA}`);
        }, 1000);
    });
}

function taskD() {
    return new Promise((resolve) => {
        setTimeout(() => {
            console.log('Task D completed');
            resolve('Result of D');
        }, 1000);
    });
}

function taskC(resultB, resultD) {
    return new Promise((resolve) => {
        setTimeout(() => {
            console.log('Task C completed');
            resolve(`Result of C with ${resultB} and ${resultD}`);
        }, 1000);
    });
}

function taskF() {
    return new Promise((resolve) => {
        setTimeout(() => {
            console.log('Task F completed');
            resolve('Result of F');
        }, 1000);
    });
}

function taskE(resultC, resultF) {
    return new Promise((resolve) => {
        setTimeout(() => {
            console.log('Task E completed');
            resolve(`Result of E with ${resultC} and ${resultF}`);
        }, 1000);
    });
}

async function main() {
    try {
        const resultA = await taskA();
        const resultB = await taskB(resultA);
        const [resultD, resultF] = await Promise.all([taskD(), taskF()]);
        const resultC = await taskC(resultB, resultD);
        const resultE = await taskE(resultC, resultF);
        console.log(resultE);
    } catch (error) {
        console.error('Error:', error);
    }
}

main();