これは、save
実際には非同期であるI/O操作です。さて、for
ループは実際には同期されています。次のように考えてください。JSエンジンは、表示された各行をシリアルに実行します。これらの行がスタック上に次々に保持されていると仮定します。 save
に関しては、 、それは別のスタックに保持され(I / O操作であるため、時間がかかるため)、残りのループを続行します。エンジンは、古いスタックのすべての行を完了した後にのみ、この新しいスタックをチェックすることがわかりました。したがって、変数cats
の値 配列の最後の項目になります。したがって、最後の値のみが保存されます。
この悲劇と戦うために、複数の方法を使用できます:
- 閉鎖-
続きを読む - 次のようにクロージャを作成できます:
cats.forEach()
- 次のようにクロージャを作成できます:
- 約束-
続きを読む 。 甘いライブラリ があります これにより、mongoドライバーの操作が簡単になります。 - ジェネレーターなど-
続きを読む 。プライムタイムの準備はまだできていません。
#2に関する注意-私はプロジェクトの寄稿者ではありませんが、作者と協力しています。私はこのライブラリを1年以上使用していますが、高速ですばらしいです!