Moment: el método `isBefore` no es determinista

Creado en 6 abr. 2018  ·  5Comentarios  ·  Fuente: moment/moment

Encontré esto mientras trabajaba en un calendario que necesita deshabilitar ciertos rangos de fechas. A veces se apaga uno.

Reproducir:

  1. abra las herramientas de desarrollo de Chrome, escriba moment().isBefore(moment())
    Ejecútelo una y otra vez, siempre debe ser false , pero a veces muestra true . Esto no parece suceder con el método isAfter . A continuación se muestra una captura de pantalla.

image

Bug

Todos 5 comentarios

Parece que isBefore se está comportando correctamente, pero de alguna manera los dos objetos moment () a veces se crean y el segundo tiene la fecha anterior. Este es el cheque que arroja resultados dispares:
https://github.com/moment/moment/blob/develop/src/lib/moment/compare.js#L26

Ya veo, ¡gracias por investigarlo y responderme!

Creo que depende del milisegundo exacto en el que se creen los momentos. El hecho de que el segundo se cree después del primero parece un error del navegador.

Hay una conversación más extensa sobre este tema aquí: https://github.com/moment/moment/issues/2697

El hecho de que el segundo se cree después del primero parece un error del navegador.

Luce bien para mi.

Compare moment().isBefore(moment()) con:
somethingThrowingAnError().method(somethingWithSideEffects())
O incluso:
somethingReturningNull().method(somethingWithSideEffects())

No esperaría ni querría que se llamara a somethingWithSideEffects() cuando se produce un error / no es posible que se llame al método.

Todo eso para decir: first _debe_ ser llamado antes de second :
first().method(second())

@ispacowanguitar algunas veces los momentos se crean en el mismo milisegundo, algunas veces no. Nada que ver aqui.

¿Fue útil esta página
0 / 5 - 0 calificaciones