Какова область применения функций обратного вызова javascript и анонимных функций? - PullRequest
2 голосов
/ 01 октября 2010

Я написал следующий код, используя node.js и riak-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', []);  

Заранее спасибо!

1 Ответ

4 голосов
/ 01 октября 2010

Вы получаете пустой массив, потому что db.get() является асинхронным.Он возвращается немедленно, не дожидаясь обратного вызова.Поэтому, когда интерпретатор достигает оператора return list, list остается пустым массивом.

В Node.js (и даже в сценариях браузера) существует фундаментальная концепция, что все асинхронно (не блокируется).).

...