我正在使用async.map函数在“arrayOne”的每个元素上调用neo4j数据库。
async.map(
arrayOne,
function(item, callback){
getClientsNb({id:item},function (err, res) {
if (err) {console.log(err); return callback(err);}
console.log(res.results[0].data); //1
callback(null,res.results[0].data);
});
},
function(err,res) {
if (err) return console.log(err);
console.log(res); //2
}
)
第一个console.log显示我想要的内容:
[{row:['DIE ZAUBERFLOETE-2013',1355]}]
但是final函数中的第二个console.log没有显示相同的结果:
[{row:[Object]}],
它来自哪里?我想在第二个console.log中获得相同的结果。
注意:getClientsNb函数如下:
function getClientsNb(param, callback) {
request.post({
uri: httpUrlForTransaction,
json: {statements: [{
statement: 'MATCH (n:Show {id:{id}})<-[:BUYS]-(m) RETURN n.name, count(distinct m)',
parameters: param}]}
},
function (err, res, body) {
if (err) {
console.log(err);
return callback(err)
} else {
return callback(null,body)
}
}).auth('neo4j', password, true);
}
答案 0 :(得分:0)
[EDITED]
通过更改第二个console.log()调用以将数据输出为JSON,您可以显示有关实际获取内容的更多详细信息:console.log("%j", res);
。结果可能是Object
。
这可能会或可能不会解决您所询问的问题,但您在错误处理方面确实存在逻辑错误。
async.map()
要求为数组中的每个项调用一次callback
。但是在您的代码中,如果传递给getClientsNb()
的匿名回调传递err
值,则返回时不会调用callback
。
此代码修复了上述问题:
async.map(
arrayOne,
function(item, callback){
getClientsNb({id:item}, function (err, res) {
if (err) { console.log(err); return callback(err); }
console.log(res.results[0].data); //1
callback(null,res.results[0].data);
});
},
function(err,res) {
if (err) return console.log(err);
console.log(res); //2
}
)