Рубрики
Без рубрики

импортировать FacePalm;

Эта статья была первоначально опубликована на NicholasCloud.com. Иногда ошибки могут быть особенно … помечены JavaScript, Lodash.

Эта статья была первоначально опубликована в nicholascloud.com .

Иногда баги могут быть особенно уклончивыми, а сегодня у меня было такое.

Модуль в глубине в нашей кодовой базе бросил Ошибка . , но только в браузере Mozilla Firefox.

Ошибка была Ns_error_illegal_value Отказ

Я сделал несколько быстрых у Duckduckgoing и обнаружил, что ошибка возникает, когда нативная функция DOM в Firefox передается значение типа, которое он не ожидает.

Трассировка стека привела к этой строке в нашем коде приложения:

const hit = find( cache, c => c.original === obj );
if ( hit ) {
    return hit.copy;
}
// ...some time later...
return someUncachedObject;

“@ -E $! && @ #” , Я думал. «Почему Лоташ Найти () Функция, передавающая плохое значение нативной функции?»

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

Я предположил, что потому что Найти () Функция была определена, что Лоташ действительно был импортирован.

Как. Неправильный. Я был.

Оказывается, window.find () на самом деле, а нестандартный, но, тем не менее, почти вездесущая функция Это предназначено для поиска документа DOM для определенной строки. И поскольку любая функция, прилагаемая к окно глобальный, отсутствующий импорт того же имени – скажем, отсутствует Лоташ/найти Импорт – не поднимет никаких аварийных сигналов. Код построен. Код побежал. И это побежало Без ошибки в каждом браузере, но Firefox Отказ Почему?

window.find () Функция ожидает первого аргумента типа Нить . В современных браузерах, кроме Firefox (в значительной степени все браузеры на основе хрома), проходящие не- Строка аргумент для window.find () просто вызвало функцию вернуть ложный . Как вы можете видеть в фрагменте выше, хотя рендеринг кэша бесполезно, приложение, тем не менее, продолжало работать. В Firefox Однако, однако, window.find () Будет ли бросить Если его первый аргумент не типа Строка Отказ Таким образом, моя ошибка.

Мне стыдно сказать, сколько времени мне понадобилось, чтобы понять Лоташ/найти не было никакой функции.

В конце концов я применил великую мудрость предков Спока, и начал рассматривать вещи, которые не мог быть так До тех пор, пока не засел меня, что возможно – просто возможно – Найти () было не то, что оказалось в конце концов.

И один Импорт Найти от «Лодаш/Найти»; Заявление исправлено ошибку.

Оригинал: “https://dev.to/nicholascloud/import-facepalm-323b”