Node.js:回调值互相依赖

时间:2015-01-03 15:44:26

标签: javascript node.js mongodb

假设我想用map函数转换数组,并使用findOne在mongoDB中查找每个值,其标准依次取决于数组的当前值。换句话说,只需将id数组转换为从DB获取的相应对象。像:

arr.map(function(v) {
            collection.findOne({_id: v}, function(
                              ?
            });

            return {newField: ?};
});

问号是需要填写的地方,但我想整个结构需要改变。希望我能说清楚。

我不习惯这种回调思维而且无法绕过它,我错过了一些明显的东西吗?

2 个答案:

答案 0 :(得分:2)

您可以使用async库来执行异步map,但在这种情况下,使用$in运算符让MongoDB将它们全部集成在一起会更容易,更快捷去:

collection.find({_id: {$in: arr}}).toArray(function(err, docs) {
    // docs contains the docs with the _id values that were in arr
});

答案 1 :(得分:0)

我不是MongoDB的专家,但您可以做的是在collection行之前设置变量,如下所示:

var return_element; var are_we_done = false;
collection.findOne({_id: v}, function(
  // assign value to return_element
  are_we_done = true;
)};
while (!are_we_done) {}
return {newField: <value of variable> };