【发布时间】:2014-07-25 13:46:59
【问题描述】:
我终其一生都无法弄清楚为什么这没有完成:
var pmongo = require('promised-mongo');
var db = pmongo('mongodb://localhost/builder');
var block_id = '538d097bbb12479d0e9f70ab';
var collection = db.collection('block');
collection.findOne({_id:db.ObjectId(block_id)})
.then(function(result) {
console.dir(result);
}).done();
它基本上只是挂起。 findOne 返回一个承诺,我正在调用完成。奇怪的是,当我在 then 中关闭数据库(即 db.close())时,它完成了。
我试图最终通过 express 处理这个问题,所以我真的不想关闭数据库。有什么诀窍???
【问题讨论】:
-
为什么最后没有参数的额外
.done()?对于您正在做的事情,您只需要.then()或.done(),而不是两者都需要。当您同时使用两者时,您将链接多个操作,但您没有多个操作。 -
诀窍就是在完成连接后关闭连接。只要有可能发生另一个事件,节点就会继续运行。而且,只要连接处于打开状态,就会假定这种潜力。
-
我放了很多 .done() 希望它会导致它停止。看起来很奇怪。在我做出承诺之前,这将停止
-
@NickLang 如果原始 mongodb 在 console.dir 之后停止,
'promised-mongo'可能正在执行原始 mongodb 以外的其他操作。正常的承诺根本不会影响这些事情。
标签: node.js mongodb promise mongojs