Я использую Node.js для написания системных сценариев, которые запускаются на сервере. Из-за асинхронного характера Node мой скрипт выходит до того, как вызовы базы данных имеют шанс завершить, и ничто никогда не записывается в базу данных.Блокирующий узел в скрипте
Я использую Mongoose как ORM и разговариваю с MongoDB, если это имеет значение. Node.js предлагает синхронные вызовы методов по этой причине, например: https://nodejs.org/api/child_process.html
Я думаю, мои вопросы:
1) Предлагает ли мангуста способ блокировать таким образом мой процесс сценариев может ждать вызова базы данных в вернуть?
2) Если нет, то есть еще один метод, который я должен рассмотреть другие, чем-то вроде:
(function wait() {
if (!SOME_EXIT_CONDITION) setTimeout(wait, 1000);
})();
3) узел не является лучшим инструментом для работы для написания сценариев? Мне нравится узел для разработки веб-приложений, и я могу писать вложенные обратные вызовы или работать с обещаниями в течение всего дня. Но как насчет скриптового языка?
EDIT --------------------------------------------- -
ниже приведен краткий пример сценария для обеспечения большей ясности ситуации:
#!/usr/bin/env node
# Please note the above that this is a bash script
var schema = mongoose.Schema({
// ... attributes ...
});
var model = new (mongoose.model('ModelObject'))();
model['attribute'] = 42;
console.log('This gets printed first');
model.save(function(err) {
console.log('Nothing in the callback gets printed because callback is never called');
if(err) { // Can't check for errors because this is never reached
console.log('This never gets printed to the screen');
console.log('And consequently nothing is ever saved to mongo');
} else {
console.log('This never gets printed either');
}
});
console.log('This gets printed second');
Неясно, в чем проблема. «мой скрипт выходит, прежде чем вызовы базы данных имеют шанс завершить». Можете ли вы подробнее рассказать об этом? Поделитесь своим кодом, который создает проблему и подробно описать ее. – marekful
Метод, который вы описали, совершенно прекрасен, что мешает вам его использовать? – sdgluck
Возможно, метод сохранения поднимается и возникает ошибка, и вы не поймаете/не показываете его – cesarluis