Функция прерывается при вызове схемы мангуста.Возможно, некоторая причуда асинхронного JS - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть функция, которая не завершает вызов модели mongoose.

Код выполняется в Node.js (v11.2.0).

/ test.js

const User = require("./users/models/users.model");
const mongoose = require("mongoose");

const testfunction = async () => {
  try {
    console.log("This is the first line of this function");
    const user = await User.findOne({
      email: "user@user.com"
    }).lean();
    console.log("This goes after the mongoose call");
    if (user) {
      console.log("user", user);
    } else {
      console.error("error occurred");
    }
  } catch (e) {
    console.log("Error: ", e);
  }
};

mongoose
  .connect(
    "mongodb://localhost:27017/testing-db",
    { useNewUrlParser: true }
  )
  .then(testfunction());

/ users.model.js

const mongoose = require("mongoose");
const nameSchema = "users";
const Schema = mongoose.Schema;
const UserSchema = new Schema(
  {
    first_name: { type: String, required: true },
    last_name: { type: String, required: true },
    email: { type: String, required: true, lowercase: true, unique: true }
  },
  {
    timestamps: true
  }
);

module.exports = mongoose.model(nameSchema, UserSchema);

Я ожидаю выхода данных пользователя из консоли на консоль.В настоящее время тестовая функция выводит только «This if первая строка этой функции» в стандартный вывод (однако программа не возвращается к вводу оболочки).Я также хотел бы знать, что является причиной проблемы.

UPD

Итак, я нашел обходной путь, чтобы сделать все это с помощью обратного вызова mongoose.connect.Код для test.js выглядит следующим образом:

const mongoose = require("mongoose");
const User = require("./tschema");

mongoose.connect(
  "mongodb://localhost:27017/portico-testing-db",
  { useNewUrlParser: true },
  async () => {
    console.log("before query");
    const user = await User.findOne({ email: "user@user.com" })
    console.log("user: ", user);
  }
);

Я до сих пор не понимаю, почему он работает так, а не иначе, но я надеюсь, что это решение поможет любому, кто находится в подобной ситуации..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...