首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用setInterval调用setInterval函数并使用不同文件中的导入和导出返回值

使用setInterval调用setInterval函数并使用不同文件中的导入和导出返回值
EN

Stack Overflow用户
提问于 2022-10-07 02:20:44
回答 1查看 38关注 0票数 1

我在JavaScript (节点)中有两个文件。在第一个文件中,我有一个函数,然后在一个setInterval()调用中导出,因为我希望它每分钟都是自调用。问题是,当我尝试export default我的setInterval(method, 60000),然后将它导入到另一个文件和console.log()中时,我得到的是interval方法本身的返回值,而不是我想要返回的值。

第一份JS档案

代码语言:javascript
运行
复制
  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

代码语言:javascript
运行
复制
import makeIntervalCall from './file1.js';

console.log({ rezults: makeIntervalCall });

控制台日志输出

代码语言:javascript
运行
复制
{                                                                                                                                                                      
  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结果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-07 02:25:49

导出一个接受侦听器函数的函数,您可以将该函数传递给makeApiCall

在这些场景中,提供删除或取消订阅功能以帮助清理也很常见。

代码语言:javascript
运行
复制
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);
  };
};

像这样使用它

代码语言:javascript
运行
复制
import makeIntervalCall from "./file1.js";

const unsub = makeIntervalCall((results) => {
  console.log(results);
});

// and when you want the interval to stop
unsub();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73981735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档