Эта статья была первоначально опубликована в 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”