问题:自动执行异步函数

以下代码完美运行:

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”必须是一个对象,得到了异步函数

那么如何自动执行异步函数呢?

提前致谢

解答

这就是为什么当您不能 100% 确定 ASI(自动分号插入)的工作原理时应该使用分号的原因。 (即使你了解 ASI,你也可能不应该依赖它,因为它很容易搞砸)

上线

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

因为在('Course',courseSchema)之后没有分号,并且因为下一行以(开头,所以解释器将您的代码解释如下:

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

也就是说,您正在使用async函数_invoking_mongoose.model('Course',courseSchema)的结果(然后尝试调用结果)。

改用分号,而不是依赖自动分号插入:

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);
})();
Logo

MongoDB社区为您提供最前沿的新闻资讯和知识内容

更多推荐