javascript - AbortController 不终止获取请求

标签 javascript node.js timeout es6-promise fetch-api

我正在尝试创建一个辅助函数,以在 2000 毫秒后自动使 fetch 请求超时。以下代码不会中止提取请求,而是在 4000 毫秒后正常打印请求。该代码似乎在浏览器中有效,但在 Node 中无效。

require('isomorphic-fetch');
const AbortController = require('abort-controller');

const fetchTimeout = async url => {
  const controller = new AbortController();

  setTimeout(() => {
    controller.abort();
  }, 2000);

  return fetch(url, { signal: controller.signal })
    .then(response => {
      return response;
    })
    .catch(error => {
      throw new Error(error.message);
    });
};

const getStock = async () => {
  return await fetchTimeout('https://httpbin.org/delay/4').then(data =>
    data.json()
  );
};

( async () => 
console.log(await getStock())
)();

最佳答案

我能够通过使用 node-fetch 库而不是 isomorphic-fetch 来解决这个问题,没有其他实现问题。我已经记录了一张票 here ,希望这可以帮助其他遇到这个令人沮丧的问题的人。

关于javascript - AbortController 不终止获取请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58552173/

相关文章:

javascript - JS 在函数运行时使用字符串调用函数

Node.js Express 4.11.2 & socket.io 出现错误?EIO=3&transport=polling&t=

java - 如何保持 jdbc 到 postgres 的存活

java - 为什么 FTPClient.setDefaultTimeout 不起作用?

c# - 如何在 WebClient.DownloadFileAsync 上实现超时

javascript - 使用 jQuery select2 设置多个值

javascript - 为什么我无法在定义 .js 源的 <script> 标记内执行 JavaScript 函数?

javascript - 如何升级 Node 文件中的特定包?

javascript - 用于多线程的 v8 储物柜

node.js - 跨源 HTTP 请求源自服务器端 NodeJS/Axios/JSDOM