mongoose не получает обновленные данные, если только не перезапущен nodejs - PullRequest
1 голос
/ 18 мая 2019

У меня есть коллекция мангустов, которая называется агентами. Я могу видеть обновленные данные с помощью консоли mongodb. Но не удается получить обновленные данные, используя $ .ajax или $ .get

.

Я новичок в nodejs и mongoose. Данные, которые я обновляю, обновляются в базе данных mongodb, но не на клиенте даже после обновления.

Маршрут, который отправляет обновленную коллекцию клиенту

router.get('/:function', function(req, res) {
  if (req.params.function === 'getWeeklyTarget') {
    helper.getWeeklyTarget().then(values => {
      res.send(values);
    })
  }
})

Функция getWeeklyTarget

function getWeeklyTarget() {
    return new Promise((resolve, reject) => {
        // Find Current Week
        let this_month = `${moment().format('MMMM')} ${moment().format('YYYY')}`;
        let this_week;
        let team_targets = [];

        Month.find({name: this_month})
            .then(foundMonth => {
                foundMonth.forEach(month => {
                    if (month.name === this_month) {
                        this_week = month.current_week;
                    }
                    findTeams.then(foundTeams => {
                        let this_week_target = [];
                        foundTeams.forEach(team => {
                            let counter = 0;
                            let another_counter = 0;
                            team.members.forEach(agent => {
                                if (this_week === 'first_week') {
                                    counter += agent.weekly_target.first_week
                                    another_counter += agent.total_sales
                                }else if (this_week === 'second_week') {
                                    counter += agent.weekly_target.second_week
                                    another_counter += agent.total_sales
                                }else if (this_week === 'third_week') {
                                    counter += agent.weekly_target.third_week
                                    another_counter += agent.total_sales
                                } else if (this_week === 'fourth_week') {
                                    counter += agent.weekly_target.fourth_week
                                    another_counter += agent.total_sales
                                }
                            })
                            this_week_target.push({
                                name: team.name,
                                target: counter,
                                achieved: another_counter
                            })
                        })
                        resolve(this_week_target);
                    })
                })
            })
    }) 
}

После обновления коллекции я хочу получить обновленные данные для клиента

1 Ответ

0 голосов
/ 19 мая 2019

Кажется, что метод resolve() вызывается более одного раза, поскольку он вызывается внутри цикла forEach.попробуйте объявить this_week_target вне цикла forEach и вызвать resolve() также вне цикла forEach.как это

function getWeeklyTarget() {
    return new Promise((resolve, reject) => {
        // Find Current Week
        let this_month = `${moment().format('MMMM')} ${moment().format('YYYY')}`;
        let this_week;
        let team_targets = [];

        Month.find({name: this_month})
            .then(foundMonth => {
              let this_week_target = [];
                foundMonth.forEach(month => {
                    if (month.name === this_month) {
                        this_week = month.current_week;
                    }
                    findTeams.then(foundTeams => {
                        foundTeams.forEach(team => {
                            let counter = 0;
                            let another_counter = 0;
                            team.members.forEach(agent => {
                                if (this_week === 'first_week') {
                                    counter += agent.weekly_target.first_week
                                    another_counter += agent.total_sales
                                }else if (this_week === 'second_week') {
                                    counter += agent.weekly_target.second_week
                                    another_counter += agent.total_sales
                                }else if (this_week === 'third_week') {
                                    counter += agent.weekly_target.third_week
                                    another_counter += agent.total_sales
                                } else if (this_week === 'fourth_week') {
                                    counter += agent.weekly_target.fourth_week
                                    another_counter += agent.total_sales
                                }
                            })
                            this_week_target.push({
                                name: team.name,
                                target: counter,
                                achieved: another_counter
                            })
                        })
                    })
                })
                resolve(this_week_target);
            })
    }) 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...