Даниэль ответил на это довольно красиво. Чтобы подробно описать исчерпывающий список способов создания и выполнения запросов, просмотрите следующие варианты использования:
Query Building
Mongoose не будет выполнять запрос до then
или exec
был вызван. Это очень полезно при построении сложных запросов. Некоторые примеры могут включать использование функций populate
и aggregate
.
User.find({name: 'John'}) // Will not execute
Выполнение с помощью обратного вызова
Несмотря на то, что многие из-за своего гнездования не нравятся, запросы могут выполняться посредством предоставляя необязательный обратный вызов.
User.find({name: 'John'}, (err, res) => {}) // Will execute
Тогда API как запросы Promises / A +
Mongoose предоставляют функцию then
. Это не следует путать с обычными обещаниями. Проще говоря, для спецификации Promises / A + требуется, чтобы функция then
работала так же, как и с обещаниями.
User.find({name: 'John'}).then(); // Will execute
Promise.all([User.find({name: 'John'}), User.find({name: 'Bob'})]) // Will execute all queries in parallel
Функция exec
От Mongoose docs If you need a fully-fledged promise, use the .exec() function.
User.find({name: 'John'}).exec(); // Will execute returning a promise
Исключения уже печатаются по умолчанию перед завершением программы. Если Вы хотите отправить, ошибка где-то в другом месте (не печатают его), можно сделать это:
try:
something()
except Exception as e:
send_somewhere(traceback.format_exception(*sys.exc_info()))
raise # reraises the exception
примечание, что этот формат с помощью as
ключевое слово для Python> 2.6. Старый путь был:
except Exception, e:
traceback модуль довольно полезен для форматирования tracebacks. Можно тогда записать его в файл журнала.