gpt4 book ai didi

node.js - 如何将变量传递给 mongodb 回调?

转载 作者:搜寻专家 更新时间:2023-11-01 00:43:02 24 4
gpt4 key购买 nike

我正在尝试从我的 mongodb 中为两个字段选择不同的值。使用 async.series,我有以下内容:

function getSettings(target){
var versions = [];
var result = {};

function putResults(key, val){
result[key] = val;
}
async.series(
[
function(callback){
db.get(target).distinct('version', function(err, arr){
if(err) return err;
versions = arr;
callback();
}); //end db call
},
function(callback){
var items;
for(var i = 0; i<versions.length; i++)
{
db.get(target).distinct('instance', {version: versions[i]}, function(err, arr){
items = arr;
putResults(versions[i], items);
}); //end db call
}
}
],
function(err){
if(err) return err;
console.log(result);
}); //end async
}

使用这段代码,我在 putResults(versions[i], items) 上得到了一个“未定义”的异常。我知道这是因为版本超出范围。我的问题是:如何将其纳入范围?

预期结果:

 result = {1: [1, 2, 3], 2: [1, 2, 3, 4]}

最佳答案

在我们的例子中最好使用 waterfall而不是 seriesmap , 像这样

function getSettings(target){
async.waterfall([
function (callback) {
db.get(target).distinct('version', function (err, versions) {
callback(err, versions);
});
},
function (versions, callback) {
async.map(versions, function (version, next) {
db.get(target).distinct('instance', {version: version}, function (err, items) {
var result = {};
result[version] = items;
next(err, result);
});
}, function (err, res) {
callback(err, res);
});
}
], function (err, result) {
if (err) {
return;
}

console.log(result);
});
}

关于node.js - 如何将变量传递给 mongodb 回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28223439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com