我在JavaScript (节点)中有两个文件。在第一个文件中,我有一个函数,然后在一个 setInterval() 调用中导出,因为我希望它每分钟都是自调用。问题是,当我尝试 export default 我的 setInterval(method, 60000) ,然后将它导入到另一个文件和 console.log() 中时,我得到的是interval方法本身的返回值,而不是我想要返回的值。
setInterval()
export default
setInterval(method, 60000)
console.log()
第一份JS档案
const makeApiCall = async () => { const res = await fetch('https://jsonplaceholder.typicode.com/posts'); const results = await res.json(); return results; export default setInterval(makeApiCall, 60000);
JS档案2
import makeIntervalCall from './file1.js'; console.log({ rezults: makeIntervalCall });
控制台日志输出
{ rezults: Timeout { _idleTimeout: 2000, _idlePrev: [TimersList], _idleNext: [TimersList], _idleStart: 2485, _onTimeout: [AsyncFunction: makeApiCall], _timerArgs: undefined, _repeat: 2000, _destroyed: false, [Symbol(refed)]: true, [Symbol(kHasPrimitive)]: false, [Symbol(asyncId)]: 43, [Symbol(triggerId)]: 0 }
因此,当在另一个文件中使用调用函数的间隔时,它会注销 Timeout 而不是结果。当导入到另一个文件时,如何提取实际的api结果?
Timeout
发布于 2022-10-07 02:25:49
导出一个接受侦听器函数的函数,您可以将该函数传递给 makeApiCall 。
makeApiCall
在这些场景中,提供删除或取消订阅功能以帮助清理也很常见。
const makeApiCall = async (listener) => { const res = await fetch("https://jsonplaceholder.typicode.com/posts"); if (!res.ok) { throw new Error(`${res.status}: ${res.statusText}`); listener(await res.json()); export default (listener) => { const timer = setInterval(makeApiCall, 60000, listener); return () => { clearInterval(timer); };
像这样使用它
import makeIntervalCall from "./file1.js";