node-fetch: почему `signal` рекомендуется вместо` timeout`? - PullRequest
0 голосов
/ 15 января 2019

Документация 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?

Ответы [ 2 ]

0 голосов
/ 30 июля 2019

Опция timeout - это собственное расширение node-fetch, которое не является частью стандарта извлечения WhatWG .

Когда он был построен, AbortController еще не существовало в стандарте, поэтому библиотека предложила timeout в качестве обходного пути.

При добавлении нестандартной функции в библиотеку, которая должна максимально точно реализовать стандарт, возникают проблемы:

  • Дополнительные функции имеют тенденцию «выползать» из библиотеки, когда люди ее используют: если они используют эту функцию, код потенциально не предназначен для будущего: если им по какой-то причине придется заменить библиотеку, их код может не совместим с другими реализациями стандарта, которые не будут иметь добавленной функции. Это форма технического долга .
  • Другой код может ожидать, что реализация будет точно соответствовать стандарту и не сможет скомпилироваться, например, при использовании TypeScript. В этом случае библиотека не может быть использована.
  • Теперь, когда AbortController существует, библиотека должна поддерживать два способа прерывания запросов, что означает больше работы по обслуживанию и больше потенциальных ошибок .

Не поощряя использование этой нестандартной функции, меньше кода будет нарушено, когда авторы в конечном итоге устареют и удалят функцию.

0 голосов
/ 21 апреля 2019

Как и в комментариях к вашему тайм-ауту, это просто расширение для извлечения узла. AbortSignal - это новый (будущий?) Стандартный способ отмены и единственный кроссплатформенный способ отмены fetch

...