Node.js:相互依赖的回调值

Node.js: callback values depending on each other

假设我想用 map 函数转换数组,每个值都在 mongoDB 中用 findOne 查找,其条件又取决于数组的当前值。换句话说,只需将 id 数组转换为从数据库中获取的相应对象。喜欢:

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

            return {newField: ?};
});

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

我不习惯这种回调思维,无法理解它,我是不是漏掉了什么明显的东西?

我不是 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> };

您可以使用 async library to perform an asynchronous map, but in this case it would be easier and faster to use the $in 运算符让 MongoDB 一次性获得它们:

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