我在JavaScript (节点)中有两个文件。在第一个文件中,我有一个函数,然后在一个setInterval()
调用中导出,因为我希望它每分钟都是自调用。问题是,当我尝试export default
我的setInterval(method, 60000)
,然后将它导入到另一个文件和console.log()
中时,我得到的是interval方法本身的返回值,而不是我想要返回的值。
第一份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结果?
发布于 2022-10-07 02:25:49
导出一个接受侦听器函数的函数,您可以将该函数传递给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";
const unsub = makeIntervalCall((results) => {
console.log(results);
});
// and when you want the interval to stop
unsub();
https://stackoverflow.com/questions/73981735
复制相似问题