Автоматически выполнять асинхронную функцию - PullRequest
0 голосов
/ 06 октября 2018

Код ниже работает отлично:

const Course = mongoose.model('Course',courseSchema)
async function foo(){

  const nodeCourse = new Course({
    name: "Node JS Course",
    author: "foo",
    tags: ['node','backend']
  })

  const result = await nodeCourse.save()
  console.log(result)
}
foo()

Но этот выдает ошибку:

const Course = mongoose.model('Course',courseSchema)
(async ()=>{

  const nodeCourse = new Course({
    name: "Node JS Course",
    author: "foo",
    tags: ['node','backend']
  })

  const result = await nodeCourse.save()
  console.log(result)
})()

Ошибка:

ObjectParameterError: Параметр "obj«to Document () должен быть объектом, получившим асинхронную функцию

Так как же я могу автоматически выполнить асинхронную функцию?

Заранее спасибо

1 Ответ

0 голосов
/ 06 октября 2018

Вот почему вы должны использовать точки с запятой, когда вы не уверены на 100% о том, как работает ASI (автоматическая вставка точек с запятой).(Даже если вы понимаете ASI, вы, вероятно, не должны полагаться на него, потому что это довольно легко испортить)

В строках

const Course = mongoose.model('Course',courseSchema)
(async ()=>{
  // ...
})();

Поскольку после ('Course',courseSchema) нет точки с запятойи поскольку следующая строка начинается с (, интерпретатор интерпретирует ваш код следующим образом:

const Course = mongoose.model('Course',courseSchema)(async ()=>{

То есть вы вызываете результат mongoose.model('Course',courseSchema) сasync (и затем пытается вызвать результат).

Вместо этого используйте точку с запятой, вместо того чтобы полагаться на автоматическую вставку точек с запятой:

const Course = mongoose.model('Course',courseSchema);
(async ()=>{
  const nodeCourse = new Course({
    name: "Node JS Course",
    author: "foo",
    tags: ['node','backend']
  });
  const result = await nodeCourse.save();
  console.log(result);
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...