自动执行异步功能

时间:2018-10-06 01:46:47

标签: javascript node.js mongodb mongoose async-await

以下代码可完美运行:

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:Document()的参数“ obj”必须是一个对象,具有异步功能

那么我该如何自动执行异步功能?

预先感谢

1 个答案:

答案 0 :(得分:10)

这就是为什么不确定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);
})();