Mongoose - Почему мы устанавливаем "mongoose.Promise = global.Promise" при настройке модуля мангуста?
Я работаю с Mongoose. Я видел, как многие разработчики сделали следующую команду:
mongoose.Promise = global.Promise;
Затем мне было любопытно посмотреть, какова первоначальная ценность mongoose.Promise
. mongoose.Promise
. Я ввел в свой редактор следующую команду:
const mongoose = require("mongoose");
console.log("promise: ", mongoose.Promise);
Моя консоль вернула мне:
Обещание: функция Promise() {[native code]}
Хорошо, так зачем делать команду mongoose.Promise = global.Promise
поскольку обещание Mongoose уже возвращает собственный код? Я не понимаю смысла, если кто-то может помочь нам понять, было бы здорово,
Спасибо
Ответы
Ответ 1
Это устаревший код из старых примеров, который не нужен в Mongoose 5.
Mongoose 4 полагался на собственную реализацию обещаний, mpromise
. mongoose.Promise
Promise
не обязательно Promise
глобально.
В документации Mongoose 4 говорится:
Mongoose 5.0 будет использовать встроенные обещания по умолчанию (или bluebird, если исходные обещания отсутствуют), но все равно будет поддерживать подключение к вашей собственной ES6-совместимой библиотеке обещаний. Mongoose 5.0 не будет поддерживать mpromise.
Хотя утверждение о Синей Птице больше не верно; Mongoose 5 отказался от поддержки версий Node, у которых нет собственных обещаний.
mongoose.Promise = global.Promise;
может все еще быть необходимо, если global.Promise
был назначен с другой реализацией (например, Bluebird) после импорта Mongoose, хотя лучше было бы вместо этого назначить global.Promise = Bluebird
ранее.
Ответ 2
Если мы хотим использовать mongoose в разных позициях внутри кодов, это должно рассматриваться как глобальный режим, поэтому нам нужно установить mongoose как:
mongoose.Promise = global.Promise;
Ответ 3
мы использовали именно в тот момент, когда мы хотим подключиться к базе данных MongoDB:
var mongoose = require('mongoose');
var mongoDB = ' database url ';
mongoose.connect(mongoDB);
mongoose.Promise = global.Promise;
mongoose.connection.on('error',console.error.bind(console, 'MongoDB connection error:'));
вам нужно создать схему и сделать свою собственную модель после
Ответ 4
Во-первых, mongoose использует Promise для приложений Async. В новых версиях это может быть:
mongoose.connect("URL").then("what you need to happen after the connection is done").catch("when the error happened")
Поэтому я использовал обещание и глобальное использование mongoose где угодно в качестве Async при написании mongoose.