javascript回调函数和匿名函数的作用域是什么?

javascript回调函数和匿名函数的作用域是什么?,javascript,node.js,riak,Javascript,Node.js,Riak,我已经使用node.js和编写了以下代码。我有一个递归函数walk,它应该是一个JSON文档列表,但返回一个空列表。。。为什么?如何修复 require('riak-js'); var walk = function(bucket, key, list){ if(list == undefined){ var list = new Array(); } db.get(bucket, key)(function(doc, meta){ list.pus

我已经使用node.js和编写了以下代码。我有一个递归函数
walk
,它应该是一个JSON文档列表,但返回一个空列表。。。为什么?如何修复

require('riak-js');

var walk = function(bucket, key, list){ 
  if(list == undefined){
    var list = new Array();
  } 
  db.get(bucket, key)(function(doc, meta){     
     list.push(doc);
     if(meta.links.length > 0 && meta.links[0].tag == 'child'){
       walk(bucket, meta.links[0].key, list);
     }   
  });
  return list; 
}

familytree = walk('smith', 'walter', []);  

提前谢谢

您得到一个空数组,因为
db.get()
是异步的。它立即返回,而不等待调用回调。因此,当解释程序到达
返回列表
语句时,
列表
仍然是一个空数组


Node.js(甚至在浏览器脚本中)的一个基本概念是,一切都是异步的(非阻塞)

根据指南,我认为你的语法错了。它应该是
db.get(bucket,key,function(doc,meta)
。@Matthew Flaschen是对的。你的
db.get
语法是错误的。实际上我的语法对于我使用的riak js版本(v0.2.2)是正确的-如果你看一下指南,你会看到它说“注意:本指南只适用于riak js 0.3.0”