Node.js中setInterval导出函数如何获取API调用返回值?
解决Node.js定时API调用的结果获取问题
问题根源
你当前默认导出的是setInterval()的返回值(也就是Timeout对象),这玩意儿是用来取消定时任务的,自然拿不到API的返回数据。要获取每次调用的结果,得调整模块的设计方式。
方案1:用回调函数传递结果
修改第一个文件,不要直接导出setInterval,而是提供一个启动定时任务并接收回调的方法:
// apiCaller.js async function makeApiCall() { const response = await fetch('https://jsonplaceholder.typicode.com/posts'); return response.json(); } export function startInterval(callback) { // 先立即执行一次,不用等一分钟才拿到第一份数据 makeApiCall().then(callback).catch(err => console.error('首次调用失败:', err)); // 启动定时任务 return setInterval(async () => { try { const data = await makeApiCall(); callback(data); } catch (err) { console.error('定时调用失败:', err); } }, 60000); }
然后在导入文件里这样用:
// index.js import { startInterval } from './apiCaller.js'; startInterval((data) => { console.log('API返回的数据:', data); });
方案2:用事件发射器(适合多场景监听)
如果需要多个地方都能拿到API结果,可以用Node.js自带的events模块:
// apiCaller.js import { EventEmitter } from 'events'; const apiEmitter = new EventEmitter(); async function makeApiCall() { try { const response = await fetch('https://jsonplaceholder.typicode.com/posts'); const data = await response.json(); apiEmitter.emit('apiData', data); // 触发数据事件 } catch (err) { apiEmitter.emit('apiError', err); // 触发错误事件 } } export function startInterval() { makeApiCall(); // 立即执行一次 return setInterval(makeApiCall, 60000); } export default apiEmitter;
导入文件里监听事件即可:
// index.js import apiEmitter, { startInterval } from './apiCaller.js'; startInterval(); // 监听正常数据 apiEmitter.on('apiData', (data) => { console.log('API返回的数据:', data); }); // 监听错误 apiEmitter.on('apiError', (err) => { console.error('API调用出错:', err); });
关键说明
setInterval()本身的作用只是调度任务执行,它的返回值是Timeout对象,用来后续调用clearInterval()取消任务,根本不会传递异步函数的返回结果。必须通过回调、事件这类机制,才能把API的返回数据传递到导入的文件中。
内容的提问来源于stack exchange,提问作者CodeConnoisseur
相关产品推荐
相关产品推荐

