2

node.js とriak-jsを使用して次のコードを記述しました。walkJSON ドキュメントのリストであるはずの再帰関数がありますが、代わりに空のリストを返します...なぜですか? 直し方?

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', []);  

前もって感謝します!

4

1 に答える 1

4

db.get()は非同期であるため、空の配列を取得します。コールバックが呼び出されるのを待たずに、すぐに戻ります。したがって、インタープリターがreturn listステートメントに到達したとき、listまだ空の配列です。

すべてが非同期 (ノンブロッキング) であるというのは、Node.js (およびブラウザー スクリプトでも) の基本的な概念です。

于 2010-10-01T04:13:23.470 に答える