Я хочу использовать все значения, которые
bericht.find({
room: room
}).toArray(function(err, docs) {
assert.equal(err, null);
str2 = str2 + docs.message;
Эту функцию можно найти, единственная проблема в том, что я все время получаю undefined. Но я хочу использовать значения и socket.emit для размера клиента, чтобы там можно было использовать все сообщения. Кто-нибудь может мне помочь? Как я могу это сделать.
const url = 'mongodb://localhost:27017';
io.on('connection', (socket) => {
var str2 = [];
// Database Name
const dbName = 'chatapplication';
const findMessageFromRoom = function(room, db, callback) {
// Get the messages from certain room
const bericht = db.collection('Bericht');
// Find some documents
bericht.find({
room: room
}).toArray(function(err, docs) {
assert.equal(err, null);
str2 = str2 + docs.message;
// callback(docs);
});
console.info(str2);
socket.emit('test1', str2);
};
function getAllMessagesInRoom(room) {
MongoClient.connect(url, function(err, client) {
assert.equal(null, err);
console.info("Connected successfully to server");
const db = client.db(dbName);
findMessageFromRoom(room, db, function() {
client.close();
});
});
}
)
};


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Node.js является асинхронным, он не будет ждать завершения запроса к базе данных, просто немедленно регистрирует переменную str2. В то время он не определен, поэтому на консоли появляется сообщение «undefined».
Используйте это так:
bericht.find({
room: room
}).toArray(function(err, docs) {
assert.equal(err, null);
str2 = str2 + docs.message;
// callback(docs);
console.info(str2);
socket.emit('test1', str2);
});