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

Другие вопросы по тегам