开发者社区> 问答> 正文

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

我在项目中使用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));
        }
    })
}

展开
收起
蛮大人123 2016-06-14 17:21:35 2756 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    yield 后面你应该接一个 promise

    2019-07-17 19:38:18
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
探究 Node.js 的服务端之路 立即下载
个推微服务实践 基于OpenResty 和Node.js 立即下载
沪江基于Node.js大规模应用实践 立即下载