Javascript 无法读取属性';保存';未定义的
我正在使用GraphQL以及NodeJ和Mongoose(我想GraphQL在这里并不重要) 当我运行查询时,我收到一条消息,说无法读取未定义的属性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
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
您能在控制台中向我们显示日志的顺序吗?因为我认为您将获得未定义的错误,然后结果值将被记录…请保留书籍。保存在与作者案例相同的异步调用中。。。