非阻塞MongoDB + NodeJS

时间:2014-03-04 00:49:50

标签: node.js mongodb blocking nonblocking

我正在尝试在MongoDB环境中的NodeJS集合中查找文档。有没有办法做到以下几点?

这不起作用:

var foo = function (id) {
    // find document
    var document = database.find(id);
    // do whatever with the document
    ...
}

这种方式会创建一个块:

var foo = function (id) {
    // find document
    var document = database.find(id);
    while (!database.find.done) {
        //wait
    }
    // do whatever with the document
    ...
}

我想做什么:

var foo = function (id) {
    // find document
    var document = database.find(id);
    // pause out of execution flow 
    // continue after find is finished
    // do whatever with the document
    ...
}

我知道我可以使用回调但是在NodeJS / JavaScript中有一种更简单的“暂停”然后“继续”的方法吗?对不起,我对网络开发还很陌生。

1 个答案:

答案 0 :(得分:1)

这是不可能的。如果您担心回调的可读性,可以考虑使用编译为JavaScript的语言。例如LiveScript有所谓的“Backcalls”,它们使代码看起来暂停,但编译成回调函数:

例如:

result <- mongodb.find id
console.log result

汇编为:

mongodb.find(id, function(result){
  return console.log(result);
});