2

node-fetch文档建议建议使用 using signaltimeout但没有提供任何关于原因的提示:

{
    // These properties are part of the Fetch Standard
    ...
    signal: null,       // pass an instance of AbortSignal to optionally abort requests
 
    // The following properties are node-fetch extensions
    ...
    timeout: 0,         // req/res timeout in ms, it resets on redirect. 0 to disable (OS limit applies). Signal is recommended instead.
    ...
}

(来源:https ://www.npmjs.com/package/node-fetch )

这是为什么?在什么情况下使用会有问题timeout

4

2 回答 2

3

timeout选项是node-fetch不属于WhatWG 获取标准的专有扩展。

当它被构建时,AbortController标准中还不存在,因此该库timeout作为一种解决方法提供。

将非标准功能添加到应该尽可能准确地实现标准的库会出现问题:

  • 当人们使用它时,额外的功能往往会从库中“爬出”:如果他们使用该功能,则代码可能不会面向未来:如果他们出于某种原因必须替换库,他们的代码可能与其他库不兼容不具有附加功能的标准的实现。这是一种技术债务
  • 其他代码可能期望实现与标准完全匹配并且无法编译,例如在使用 TypeScript 时。在这种情况下,无法使用该库。
  • 现在AbortController存在,库必须维护两种中止请求的方式,这意味着更多的维护工作和更多的潜在错误

通过不鼓励使用这种非标准特性,当作者最终弃用并删除该特性时,将破坏更少的代码。

于 2019-07-30T14:44:37.770 回答
0

正如您的代码注释中所说,超时只是一个节点获取扩展。AbortSignal 是新的(未来?)标准取消方式,也是唯一的跨平台取消方式fetch

于 2019-04-21T06:49:22.817 回答