Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Problema ao passar um argumento para uma função com mongoose

Eu estou tentando passar um argumento que contem ids de usuários do banco de dados para uma função, só que quando entro na route dela ela só fica ou carregando para sempre ou aparece um conjunto vazio. Eis os códigos: Eis os códigos:

const calculate_followers_week = (req, res) => {
let user_id = req.params.id;
UserHistorySchema.find(user_id?{_id: mongoose.Types.ObjectId(user_id)}:{}, {'history.created_at':1, 'history.meta.indicators':1})
.lean()
.exec()
.then(data => {
    var processado = UserMetricsModule.getUserFollowedBy(data);
    res.status(200).json(processado);
})
.catch(err => {
    res.status(400).json(err);
})
}

Esse é onde eu uso o find para pesquisar os dados que eu preciso com mongoose.

function getUserFollowedBy (user) {

let yesterday = moment().subtract(1, 'days');

let difference = 0;
for(i = 0; i < user.length; i++) {
    if(moment(user[i].created_at).isSameOrAfter(yesterday, 'days')) {

        difference = user[i + 1].meta.indicators.followed_by - user[i].meta.indicators.followed_by;
        console.log(" " + difference);
    } else {}
}
}

E esse era para ser o que receberia esses dados e faria um calculo a partir deles

Mas não está dando certo nem passar os dados e muito menos usar eles. Já tentei de tudo mas não consegui encontrar uma solução para isso, ainda estou aprendendo. "Se precisarem de mais alguma informação é só perguntar". Agradeço desde já. :-)

1 resposta
solução!

Javascript funciona assincronamente, então pode ser que enquanto a função getUserFollowedBy é executada a proxima linha de codigo (a que retorna o status 200) já é executada.

O que eu recomendaria seria na função getUserFollowedBy colocar como um parametro uma função de callback que seria chamada no final da execução da função e ai o express mandaria a resposta.