Проблема с порядком выполнения кода в Node.js
Привет всем! У меня есть проблема с пониманием того, как работает JavaScript в Node.js. Раньше я писал в основном на Java, поэтому асинхронность для меня новая.
Я создаю проект для импорта текстовых данных в MongoDB через Node.js. Код работает нормально, но меня смущает порядок выполнения операций.
Вот что я вижу в консоли:
- файл прочитан полностью
- закрываю базу данных
- запись добавлена (повторяется много раз)
Вот мой код:
var fileSystem = require('fs'),
lineReader = require('readline'),
inputStream = fileSystem.createReadStream(settings.fileName),
outputStream = new (require('stream'))(),
reader = lineReader.createInterface(inputStream, outputStream);
reader.on('line', function (currentLine) {
var parts = currentLine.split(" ");
userName = "@" + parts[0];
messageText = "'" + parts[1] + "'";
authorName = settings.authorName;
createdDate = new Date().toISOString();
messageData = {
username: userName,
message: messageText,
author: authorName,
created: createdDate
};
database.collection("messages").insertOne(messageData, function(error, result) {
if (error) throw error;
console.log("запись добавлена");
});
});
reader.on('close', function (currentLine) {
console.log('файл прочитан полностью');
console.log('закрываю базу данных')
database.close();
});
Почему я сначала вижу сообщения о закрытии файла и базы, а потом все сообщения о добавлении записей? Это из-за задержки при работе с базой данных? И как вообще записи добавляются, если база уже закрыта?
Буду благодарен за объяснение!