在nodejs中为什么mongodb会影响到generator-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

在nodejs中为什么mongodb会影响到generator

蛮大人123 2016-06-14 17:21:35 1180

我在项目中使用nodejs中的generator对mongodb进行操作,但是实验发现只要mongodb的连接不关闭,那么即便generator的done变成true了,程序也不会退出,请各位大侠解惑。
下面的代码中只要把所有的db.close()注释掉,就会出现generator的done为true了,但是程序依然不退出的情况。

var mongodb = require('mongodb');
var db = null;
function* DO(){
    try{
        db = yield connectMongodb();
        var collection = db.collection('userStruct');
        console.log('collection');
        var res = yield findSomething(collection, db);
        console.log('res', res);
    }catch(e){
        console.log('err', e);
        if(db){
            db.close();
        }
    }
}
var a = DO();
console.log('first', a.next());

function connectMongodb(){
    var mongoClient = mongodb.MongoClient;

    var DB_CONN_STR = 'mongodb://127.0.0.1:27017/jue';

    mongoClient.connect(DB_CONN_STR, function(err, db){
        if(err){
            a.throw(err);
        }else{
            console.log('connect', a.next(db));}
        }
    })
}
function findSomething(collection, db){
    collection.find({test:1}).toArray(function(err, retArr){
        if(err){
            a.throw(err);
        }else{
            console.log('in find');
            db.close();
            console.log('find', a.next(retArr));
        }
    })
}
NoSQL JavaScript MongoDB
分享到
取消 提交回答
全部回答(1)
  • 蛮大人123
    2019-07-17 19:38:18

    yield 后面你应该接一个 promise

    0 0
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

推荐文章
相似问题
推荐课程