同步猫鼬和nodejs操作

时间:2018-10-20 23:26:03

标签: javascript node.js mongoose

作为我正在进行的训练营课程的一部分,我正在学习构建Monfulose,GraphQL和NodeJs的Restful API。

这是我的代码

resolve (parent, args) {

                let books = new book({
                    name: args.name, 
                    genre: args.genre,
                    authorName: args.authorName
                })    

                let author = new Author({ 
                    name: args.authorName
                })

                book.find( 
                    {
                        name: args.name
                    }, function(error, results) {
                        if (results.length == 0 ) {
                            Author.find(
                                {
                                  name: args.authorName
                                },
                                function (err, result) {
                                    if (result.length == 0) {    
                                    author.save()
                                  }
                                 })
                              }
                              books.save()  
                            })
                    return books
            }

现在,尽管可行,但问题是书籍和作者在GraphQL查询中以及在运行查询时都链接在一起。

将整个故事部分放在一边。当我的猫鼬中的操作结束时(因为猫鼬是异步的),我想归还图书(或者说我想归还books.save())

我愚蠢地想到最后要做这样的事情

             books.save()  
                            }).then(() => {
                    return books
                })
            }

,但是在这里退货是在返回承诺而不是解决方案。

问题:MongoDB操作结束后如何返回resolve? (或与MongoDB同步)

1 个答案:

答案 0 :(得分:0)

  1. 您需要将异步放在函数声明上。
  2. 在模型上调用find时,请使用await,而不要在find()上传递函数回调。

例如:const books = await book.find({name: args.name}) 将返回书籍数组或null