Я пытаюсь работать с привязкой документов в разных коллекциях (не вложенных документах), а пока проблема для этого в Mongooose, я пытаюсь обходите его теперь ленивой загрузкой связанного документа с виртуальным свойством, как документировано на веб-сайте Mongoose.
Проблема заключается в том, что getter для виртуального принимает функцию в качестве аргумента и использует возвращаемое значение для виртуального свойства. Это замечательно, когда виртуальный сервер не требует каких-либо асинхронных вызовов для вычисления его значения, но не работает, когда мне нужно сделать асинхронный вызов для загрузки другого документа. Здесь пример кода, с которым я работаю:
TransactionSchema.virtual('notebook')
.get( function() { // <-- the return value of this function is used as the property value
Notebook.findById(this.notebookId, function(err, notebook) {
return notebook; // I can't use this value, since the outer function returns before we get to this code
})
// undefined is returned here as the properties value
});
Это не работает, так как функция возвращается до завершения асинхронного вызова. Есть ли способ, которым я мог бы использовать библиотеку управления потоками, чтобы выполнить эту работу, или я могу изменить первую функцию, чтобы передать вызов findById на getter вместо анонимной функции?