使用回调函数更新JSON对象

时间:2015-06-25 01:16:43

标签: javascript json node.js asynchronous

所以我有一个db_functions.js文件,其中包含一些与数据库交互的函数。这是其中的一部分:

function getUsers(client, fn){
    //var directors = {};
    client.keys('*', function(err, keys){
        keys.forEach(function(key){
            client.hgetall(key, function(err, vals){
            fn(key, vals);
        });
        });
    });

我在另一个文件中使用getUsers函数:

router.get('/accounts', function(req, res){
    var dir = {};
    db_functions.getUsers(client, function(key, vals, cb){
        dir[key] = vals;
        cb(dir);

        function cb(f){
            var final_dir = {};

            console.log(f)
            res.json(f);
        }
    }

    )});

我正在尝试使用回调从数据库获取一些信息,使用该信息更新JSON对象,当我使用所有信息更新对象时,将JSON对象作为响应发送。

问题出现在cb函数中,res.json被多次调用,这给出了“在发送后无法设置标题”错误。只有在dir完成更新后才能调用res.json

2 个答案:

答案 0 :(得分:2)

  只有在dir完成更新后才能调用res.json

为什么不在收集完所有数据后才调用def sequence(lo: List[Option[A]]): Option[List[A]] = lo.flatten match { la: List[A] if(la.length == lo.length) => Some(la) _ => None } 回调?

getUsers

答案 1 :(得分:-2)

你的意思是AJAX回调方法吗? 像:

  var jqxhr = $.get( "example.php", function(return_data) {
    console.log( return_data );
  })
  .done(function() {
    console.log( return_data );
  })
  .fail(function() {
    console.log( return_data );
  })
  .always(function() {
    console.log( return_data );
  });