Moment: o método `isBefore` não é determinístico

Criado em 6 abr. 2018  ·  5Comentários  ·  Fonte: moment/moment

Eu descobri isso enquanto trabalhava em um calendário que precisa desativar determinados intervalos de datas. Às vezes está errado por um.

Reproduzir:

  1. abra as ferramentas de desenvolvimento do Chrome, digite moment().isBefore(moment())
    Execute-o repetidamente, sempre deve ser false , mas às vezes mostra true . Isso não parece acontecer com o método isAfter . Abaixo está uma captura de tela.

image

Bug

Todos 5 comentários

Parece que isBefore está se comportando corretamente, mas de alguma forma os dois objetos moment () às vezes são criados com o segundo tendo a data anterior. Esta é a verificação que está retornando resultados díspares:
https://github.com/moment/moment/blob/develop/src/lib/moment/compare.js#L26

Entendo, obrigado por investigar e responder a mim

Acho que depende do milissegundo exato em que os momentos são criados. O fato de o segundo ser criado após o primeiro parece um bug do navegador.

Há uma conversa mais extensa sobre este tópico aqui: https://github.com/moment/moment/issues/2697

O fato de o segundo ser criado após o primeiro parece um bug do navegador.

Parece bom para mim.

Compare moment().isBefore(moment()) com:
somethingThrowingAnError().method(somethingWithSideEffects())
Ou ainda:
somethingReturningNull().method(somethingWithSideEffects())

Você não esperaria ou desejaria que somethingWithSideEffects() fosse chamado quando um erro fosse lançado / o método possivelmente não pudesse ser chamado.

Tudo isso para dizer: first _deve_ ser chamado antes de second :
first().method(second())

@ispacowanguitar algumas vezes os momentos são criados no mesmo milissegundo, outras vezes não. Nada para ver aqui.

Esta página foi útil?
0 / 5 - 0 avaliações