Я постараюсь сделать это как можно проще. Кажется, что следующая функция работает очень странно. Результат, который я получаю от своих тестовых отпечатков, составляет порядка 1, 4, 3, 2 (с пустым возвратом).Линии, запускаемые в странном порядке
Это, по-видимому, предполагает, что код внутри этих кодовых блоков выполняется последним, что, как вы можете предположить, создает некоторые проблемы, когда я хочу вернуть returnList.
var server = new mongo.Server('localhost', 27017);
var db = new mongo.Db('tdp013', server);
app.get('/getall', function (req, res) {
var returnList = [];
console.log("1");
db.open(function(err, client){
client.collection("messages", function(err, col){
col.find({}, function(err, cursor){
cursor.each(function(err, item){
if(item!=null){
console.log("2");
returnList.push(item);
}
});
console.log("3");
});
});
});
console.log("4");
console.log(returnList);
res.sendStatus(200);
});
Мой вопрос просто так, есть хорошее объяснение (в отсутствии лучшего слова), почему/как эти линии не становятся выполняется в письменном порядке?
Или, альтернативно, есть способ вернуть returnList, не делая этого на итерации?
Поскольку вы добавили 'console.log (" 2 ");' и 'console.log (" 3 ");' в функцию обратного вызова, поэтому эти строки выполняются при выполнении этого метода. И 'console.log (" 4 ");' не будет ждать метода 'db.open'. Будет результат 1, 4, 3, 2. – deepakb