さまざまなコレクション (埋め込みドキュメントではない) でドキュメントを関連付けようとしていますが、Mongooose には問題がありますが、ドキュメントに記載されているように、仮想プロパティを使用して関連付けられたドキュメントを遅延読み込みすることで回避しようとしています。マングースのウェブサイト。
問題は、仮想のゲッターが引数として関数を取り、仮想プロパティの戻り値を使用することです。これは、仮想がその値を計算するために非同期呼び出しを必要としない場合に最適ですが、他のドキュメントをロードするために非同期呼び出しを行う必要がある場合には機能しません。私が使用しているサンプルコードは次のとおりです。
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
});
非同期呼び出しが完了する前に関数が戻るため、これは機能しません。フロー制御ライブラリを使用してこれを機能させる方法はありますか、または匿名関数の代わりに getById 呼び出しを getter に渡すように最初の関数を変更できますか?