Moment: `isBefore`メソッドは非決定論的です

作成日 2018年04月06日  ·  5コメント  ·  ソース: moment/moment

特定の日付範囲を無効にする必要があるカレンダーで作業しているときに、これを見つけました。 時々1つずつずれます。

再現するには:

  1. Chrome dev-toolsを開き、 moment().isBefore(moment())
    何度も繰り返し実行すると、常にfalseになるはずですが、 trueと表示されることもあります。 これは、 isAfterメソッドでは発生しないようです。 以下はスクリーンショットです。

image

Bug

全てのコメント5件

isBeforeは正しく動作しているように見えますが、どういうわけか2つのmoment()オブジェクトが作成され、2番目のオブジェクトの日付が早い場合があります。 これは、異なる結果を返すチェックです。
https://github.com/moment/moment/blob/develop/src/lib/moment/compare.js#L26

なるほど、調べてくれてありがとう!

モーメントが生成される正確なミリ秒に依存すると思います。 2番目が最初の後に作成されるという事実はブラウザのバグのように感じます。

このトピックに関するより広範な会話がここにあります: https

2番目が最初の後に作成されるという事実はブラウザのバグのように感じます。

私には元気そうだ。

moment().isBefore(moment())と比較してください:
somethingThrowingAnError().method(somethingWithSideEffects())
あるいは:
somethingReturningNull().method(somethingWithSideEffects())

エラーがスローされたときにsomethingWithSideEffects()が呼び出されることを期待したり、望まなかったりします。

つまり、 first _はsecond前に呼び出す必要があります:
first().method(second())

@ispacowanguitar瞬間が同じミリ秒で作成される場合もあれば、そうでない場合もあります。 ここには何も表示されません。

このページは役に立ちましたか?
0 / 5 - 0 評価