問題がありますが、これをどのように回避すればよいかわかりません。
私はループバックを使用していますが、遅かれ早かれmongodbで同じ問題に直面していたと思います。私が何をしているのか説明しましょう:
- 別の REST サービスからエントリを取得し、API 応答用のエントリを準備します (データベースからの ID がないため、エントリはまだ準備ができていません)
- 応答を送信する前に、エントリがデータベースに存在するかどうかを確認します。存在しない場合:
- 存在する場合は作成します (source_id で決定):
- それを使用して、新しいバージョンに更新してください
- エントリを含む応答を送信します (エントリにはデータベース ID が割り当てられています)
これは問題ないようで、実装も簡単ですが、私の知る限りではありません。コードでさらに説明しようとします:
//This will not work since there are many async call, and fixedResults will be empty at the end
var fixedResults = [];
//results is array of entries
results.forEach(function(item) {
Entry.findOne({where: {source_id: item.source_id}}, functioN(err, res) {
//Did we find it in database?
if(res === null) {
//Create object, another async call here
fixedResults.push(newObj);
} else {
//Update object, another async call here
fixedResults.push(updatedObj);
}
});
});
callback(null, fixedResults);
注: コードの一部を省略しましたが、読んでいただければ一目瞭然だと思います。
したがって、すべてのオブジェクトを反復処理し、データベースでそれらを作成または更新し、すべてが更新/作成されたらそれらを使用します。どうすればいいですか?