node.js - 传递给回调时字典更改

时间:2016-03-14 23:57:04

标签: node.js neo4j

我正在使用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);
}

1 个答案:

答案 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
    }
)