如何让异步任务运行指定时长后再获取结果?
实现指定运行时长的异步任务处理器
要实现你需要的任务处理器,核心是利用Promise结合定时器控制异步等待时长,同时让处理器对象支持await语法。下面是具体实现方案:
核心实现代码
function TaskCreator() { // 初始化默认立即完成的Promise let delayTask = Promise.resolve("默认完成"); return { // 设置任务运行的固定时长(单位:毫秒) awaitFor(delay) { delayTask = new Promise((resolve) => { setTimeout(() => { // 可自定义任务完成后的返回结果 resolve(`任务已运行${delay}毫秒完成`); }, delay); }); }, // 实现then方法,让对象支持await语法 then(onFulfilled, onRejected) { return delayTask.then(onFulfilled, onRejected); } }; }
匹配需求的使用示例
(async function() { const th = TaskCreator(); // 设定任务运行时长为5000毫秒(5秒) th.awaitFor(5000); // 执行你的自定义操作(这里模拟耗时2秒的工作) console.log("开始执行自定义操作..."); await new Promise(resolve => setTimeout(resolve, 2000)); console.log("自定义操作完成,等待任务处理器结果..."); // 等待任务处理器完成并获取结果 const result = await th; console.log(result); // 会在调用awaitFor后5秒输出结果 })();
实现逻辑说明
- awaitFor方法:接收毫秒数参数,创建一个通过
setTimeout延迟resolve的Promise,确保任务满指定时长后返回结果。 - then方法:让TaskCreator返回的对象成为
thenable类型,使其能被await关键字识别,实现异步等待。 - 时序控制:调用
awaitFor后任务开始计时,你可在计时期间并行执行自定义操作;最后await时,若计时未结束会自动等待剩余时长,保证任务运行满设定时长。
内容的提问来源于stack exchange,提问作者DuckQueen
相关产品推荐
相关产品推荐

