node-fetch: почему `signal` рекомендуется вместо`timeout`?
node-fetch
документация предполагает, что с помощью signal
рекомендуется более timeout
, но не предлагает никаких подсказок относительно того, почему:
{
// 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
?
0 ответов
В timeout
вариант - это node-fetch
- собственное расширение, которое не является частью стандарта выборки WhatWG.
Когда он был построен, AbortController
еще не было в стандарте, поэтому библиотека предлагала timeout
как обходной путь.
Добавление нестандартной функции в библиотеку, которая должна максимально точно реализовать стандарт, имеет проблемы:
- Дополнительные функции имеют тенденцию `` выползать '' из библиотеки, когда люди ее используют: если они используют эту функцию, код потенциально не рассчитан на будущее: если им по какой-то причине придется заменить библиотеку, их код может быть несовместим с другим реализации стандарта, в которых не будет добавленной функции. Это форма технического долга.
- Другой код может ожидать, что реализация будет точно соответствовать стандарту и не сможет компилироваться, например, при использовании TypeScript. В этом случае библиотеку использовать нельзя.
- Теперь, когда
AbortController
существует, библиотека должна поддерживать два способа отмены запросов, что означает больше работы по обслуживанию и больше потенциальных ошибок.
Отказавшись от использования этой нестандартной функции, меньше кода будет ломаться, когда авторы в конечном итоге откажутся от этой функции и удалят ее.
Как и в комментариях к вашему тайм-ауту, это просто расширение для извлечения узла. AbortSignal - это новый (будущий?) Стандартный способ отмены и единственный кросс-платформенный способ отмены fetch