Javascript 无法读取属性';保存';未定义的

Javascript 无法读取属性';保存';未定义的,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,我正在使用GraphQL以及NodeJ和Mongoose(我想GraphQL在这里并不重要) 当我运行查询时,我收到一条消息,说无法读取未定义的属性save。 resolve (parent, args) { let books book.find( { name: args.name }, function (error, result){ con

我正在使用GraphQL以及NodeJ和Mongoose(我想GraphQL在这里并不重要)

当我运行查询时,我收到一条消息,说无法读取未定义的属性
save

      resolve (parent, args) {
        let books
        book.find(
            {
            name: args.name
            }, function (error, result){
                console.log(result.length)
                if (result.length == 0) { 

                    console.log(args.name)
                    books = new book({
                        name: args.name, 
                        genre: args.genre,
                        authorName: args.authorName
                    })    
                    Author.find(
                        {
                        name: args.authorName
                        },
                        function (err, results) {
                            if (results.length == 0) {
                                let author = new Author({ 
                                    name: args.authorName
                                })
                            author.save()
                        }
                        });
                }
            })
                return books.save()
        }
这是我的代码,请注意上面的two console.log。第一个console.log显示长度为零,第二个console.log中确实有一个值

另外,作者和书是我正在导入的猫鼬模式

const Author = require("../models/author.js")
const book = require("../models/book.js")
我声明了
let books
就在
resolve(parent,args){
的下面,这是为了范围


问题:现在,我对JS没有太多的经验,所以有人能帮我分享一下我的错误吗?

你的问题是book.find函数是异步的。这意味着包含
的行返回books.save()
将在book.find函数回调之前执行。设置books变量后,您可以在回调中移动对book save的调用。

更新了我的问题
。find
方法是异步的,在查询完成之前调用
。save
executed@FrankerZ回调在他调用之后执行
.save
您能在控制台中向我们显示日志的顺序吗?因为我认为您将获得未定义的错误,然后结果值将被记录…请保留书籍。保存在与作者案例相同的异步调用中。。。