Невозможно получить объект из mongodb в родительскую функцию - PullRequest
1 голос
/ 18 июня 2020

Я пытаюсь получить доступ к объекту, полученному мной из mon go collection , вне его функции.

Вот что я делаю:

function getOldMessage(user) {
//this is where i want to store the object
var oldMsg = {};
messagedb.findOne({ "room": user.room }, function(err, foundMsg) {
    if (err) {
        console.log(err)
    } else {
        //here i am assigning this foundMsg to my object
        oldMsg = foundMsg;
    }
})
// here this is undefined or an empty object
console.log(oldMsg);
return oldMsg;

}

Ответы [ 2 ]

2 голосов
/ 18 июня 2020

var oldMsg объявлен в рамках getOldMessage и недоступен в родительской области, в которой вы пытаетесь получить к нему доступ. Для получения дополнительной информации об области см. Понимание области в JavaScript.

Mon goose методы возвращают обещания, поэтому вы можете использовать async / await для получения старого значения из mon go.

const getOldMessage = async user => messagedb.findOne({ "room": user.room });

const oldMessage = await getOldMessage(someUser);
console.log(oldMessage);

Или, если хотите, Promise

const getOldMessage = user => new Promise((resolve, reject) =>  
    messagedb.findOne({ "room": user.room },(err, foundMsg) => {
        if (err) return reject(err);
        resolve(foundMsg);
    })
);

getOldMessage(someUser).then(message => console.log(message));

0 голосов
/ 18 июня 2020

У меня была такая же проблема. Мне не удалось найти решение, поэтому я решил его следующим образом:

var oldMsg = {};
oldMsg = await messagedb.findOne({ "room": user.room });
console.log(oldMsg);
return oldMsg;

Но вы должны изменить свою функцию на asyn c.

Надеюсь, это поможет.

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