MST

星途 面试题库

面试题:Node.js 中如何使用 Promise 实现异步任务的超时控制

在Node.js项目里,已知有一个通过Promise实现的异步任务,例如读取文件操作。要求你编写代码,设置该异步任务在500毫秒后如果还未完成则自动超时,并抛出一个错误提示任务超时。请给出具体实现代码。
42.4万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试
const { promisify } = require('util');
const fs = require('fs');
const readFile = promisify(fs.readFile);

function timeoutPromise(promise, ms) {
    return new Promise((resolve, reject) => {
        const timeoutId = setTimeout(() => {
            reject(new Error('任务超时'));
        }, ms);
        promise.then(resolve).catch(reject).finally(() => {
            clearTimeout(timeoutId);
        });
    });
}

timeoutPromise(readFile('test.txt', 'utf8'), 500)
   .then(data => {
        console.log(data);
    })
   .catch(err => {
        console.error(err.message);
    });