Почему я не могу отсортировать массив дат, возвращенный моим запросом Firebase? - PullRequest
2 голосов
/ 29 марта 2019

У меня есть функция сортировки, которая работает с жестко закодированным массивом дат.Но когда я пытаюсь отсортировать массив дат, созданный моим запросом Firebase, я не могу отсортировать.

//THIS DOES NOT SORT
const dayRef = firebase.database().ref('Calendar/District/' + district + '/validDays/');
dayRef.once('value').then(function (snapshot) {
    var value = snapshot.val();
    if (value) {
        snapshot.forEach(function (childSnapshot) {
            var myDate = childSnapshot.val();
            days.push(new Date(myDate.date)); //ARRAY DOES NOT SORT
        });
    }
});

// THIS SORTS MY HARD CODED ARRAY
var dates = [
    new Date(2010, 5, 10),
    new Date(2010, 2, 10),
    new Date(2010, 3, 10),
    new Date(2010, 8, 10),
    new Date(2010, 1, 10),
    new Date(2010, 6, 10),
    new Date(2010, 11, 10),
    new Date(2010, 8, 10)];

var date_sort_asc = function (date1, date2) {
    if (date1 > date2) return 1;
    if (date1 < date2) return -1;
    return 0;
};

console.log(dates.sort(date_sort_asc)) // this sorts
console.log(days.sort(date_sort_asc)) // this does not sort
</script>

Мне нужно отсортировать массив дней в порядке возрастания

Ответы [ 3 ]

2 голосов
/ 29 марта 2019

Вы сортируете до выполнения обещания.

if (value) {
    snapshot.forEach(function (childSnapshot) {
        var myDate = childSnapshot.val();
        days.push(new Date(myDate.date)); //ARRAY DOES NOT SORT, yet...
    });
    days.sort(date_sort_asc); // <-- Do it here
}
1 голос
/ 29 марта 2019

Ваш код для firebase является асинхронным. Вы должны отсортировать в блоке .then после цикла foreach. Проверьте это скрипка

snapshot.forEach(function (childSnapshot) {
    var myDate = childSnapshot.val();
    days.push(new Date(myDate.date));
 });
 days.sort(date_sort_asc); // Sort here
 console.log(days);
0 голосов
/ 29 марта 2019

Спасибо, Джонатон Хэмел - это ответ ... Сортируйте после своего снимка.forEach, так как вы используете асинхронный код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...