1. ホーム
  2. javascript

[解決済み] Mongoose - なぜ mongoose モジュールを設定するときに "mongoose.Promise = global.Promise" とするのか?

2022-02-13 08:01:23

質問内容

私はMongooseを使って仕事をしています。多くの開発者が以下のようなコマンドを作成しているのを見かけました。

mongoose.Promise = global.Promise;

そこで気になったのが、元の値である mongoose.Promise . エディタで次のようなコマンドを入力しました。

const mongoose = require("mongoose");

console.log("promise: ", mongoose.Promise);

コンソールは私を返した。

<ブロッククオート

promise: function Promise() { [ネイティブコード] }.

さて、ではなぜコマンドを mongoose.Promise = global.Promise Mongoose のプロミスはすでにネイティブのコードを返しているから?意味がわかりません。どなたかわかる方がいらっしゃいましたら、教えていただければ幸いです。

ありがとうございます。

解決方法は?

これは古い例のレガシーコードで、Mongoose 5 では必要ないものです。

Mongoose 4 は独自のプロミス実装に依存しています。 mpromise . mongoose.Promise は、必ずしも Promise をグローバルに展開します。

として Mongoose 4 ドキュメント が記載されています。

マングース5.0では、デフォルトでネイティブプロミスが使用されます(またはbluebird, ネイティブプロミスが存在しない場合)でも ES6互換のプロミスライブラリのプラグインをサポートします。マングース 5.0 は mpromise をサポートしません。

ブルーバードに関する記述はもはや真実ではありませんが、Mongoose 5ではネイティブのプロミスを持たないNodeバージョンのサポートが打ち切られました。

mongoose.Promise = global.Promise;

が必要な場合があります。 global.Promise は Mongoose をインポートした後に別の実装 (Bluebird など) で割り当てたものです。 global.Promise = Bluebird をもっと早くから使っていました。