Moment: метод isBefore недетерминирован

Созданный на 6 апр. 2018  ·  5Комментарии  ·  Источник: moment/moment

Я обнаружил это во время работы над календарем, которому необходимо отключить определенные диапазоны дат. Иногда это не так.

Воспроизвести:

  1. откройте chrome dev-tools, введите moment().isBefore(moment())
    Запускайте его снова и снова, он всегда должен быть false , но иногда показывает true . Похоже, что этого не происходит с методом isAfter . Ниже скриншот.

image

Все 5 Комментарий

Похоже, что isBefore ведет себя правильно, но каким-то образом два объекта moment () иногда создаются со вторым, имеющим более раннюю дату. Это проверка, которая возвращает несопоставимые результаты:
https://github.com/moment/moment/blob/develop/src/lib/moment/compare.js#L26

Понятно, спасибо, что изучили это и связались со мной!

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

Здесь есть более обширный разговор по этой теме: https://github.com/moment/moment/issues/2697

Тот факт, что второй создается после первого, кажется ошибкой браузера.

Мне кажется, это нормально.

Сравните moment().isBefore(moment()) с:
somethingThrowingAnError().method(somethingWithSideEffects())
Или даже:
somethingReturningNull().method(somethingWithSideEffects())

Вы не ожидаете или не хотите, чтобы somethingWithSideEffects() вызывался при возникновении ошибки / метод не может быть вызван.

Все, что нужно сказать: first _должен быть вызван перед second :
first().method(second())

@ispacowanguitar иногда моменты создаются за одну и ту же миллисекунду, иногда нет. Здесь ничего нет.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги