javascript回调和匿名函数的范围是什么?

发布于 2024-09-25 15:32:51 字数 577 浏览 8 评论 0原文

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

提前致谢!

I have written the following code using node.js and riak-js. I have a recursive function walk that should be a list of JSON documents, but instead returns an empty list... why? how to fix?

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

Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心不设防 2024-10-02 15:32:51

您会得到一个空数组,因为 db.get() 是异步的。它立即返回,无需等待回调被调用。因此,当解释器到达return list语句时,list仍然是一个空数组。

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

You get an empty array because db.get() is asynchronous. It returns immediately without waiting for the callback to be invoked. Therefore when the interpretor reaches the return list statement, list is still an empty array.

It is a fundamental concept in Node.js (and even in browser scripting) that everything is asynchronous (non-blocking).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文