Node.js MongoDB驱动程序异步/等待查询

54

我有一个使用mongodb原生驱动程序的node.js应用程序。在使用node v8.9.1迁移我的应用程序代码到async/await的过程中,我正在努力寻找一种优雅的方法来处理mongodb查询。mongodb驱动程序的主要问题是所有查询都使用回调函数,而异步方法必须使用promise函数。

替代方法:

  • mongoose- 建议使用promise查询已弃用,并且它强制使用架构模型,这对我的应用程序有点负担。
  • mongoist- 据说很好,因为它是针对async/await构建的,完全支持promise,但连接SSL到mongodb时出错且文档不足-让我放弃了这个解决方案。

我唯一成功实现的优雅方法是使用callback-promise npm包将mongodb驱动程序API转换为完全支持promise。

是否有其他高性能的优雅方式?


@MikaS 似乎需要“co”软件包。我基本上正在寻找一个完整的Promise本地库。 - Ido Lev
11个回答

0

我正在尝试使用mongojs从mongodb中获取数据,并在graphiql服务器中显示。我已经使用了promises并最终成功了。

async resolve(parent,args){
                function getdata(){
                return new Promise(function(resolve,reject){
                    var o_id = ObjectId(args.id);
                    var obj = {_id:o_id}
                    db.book.find(obj,(err,data) => {
                        if(err){
                            console.log(err);
                            reject("error in sending the book data");
                            }
                        else{
                                if(data.length>0){
                                   resolve(data);
                                }else{reject("data length is ! > 0")}
                        }
                    });
                })
                }
                async function calldata(){
                    var dataNew = await getdata().then(function(returnedData){
                        return returnedData;
                    }).catch(function(errorinpassing){
                        console.log(errorinpassing);
                    })
                    return dataNew
                }
                var hello = await calldata()
                if(hello.length>0){
                    return hello[0]
                }
            }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接