Javascript 如何在使用node.js的node zookeeper客户端中同时使用getChildren和getData方法?

Javascript 如何在使用node.js的node zookeeper客户端中同时使用getChildren和getData方法?,javascript,node.js,apache-zookeeper,Javascript,Node.js,Apache Zookeeper,我是Node.js的新手。我正在尝试使用npm中的节点zookeeper客户端(Github链接-) 我想了解如何同时使用这个库中可用的getChildren和getData方法 其目的是迭代给定路径的所有子级,获取所有子级的数据,并在转到下一个子级之前同步打印出来 var zookeeper = require('node-zookeeper-client'); var client = zookeeper.createClient('localhost:2181'); var path =

我是Node.js的新手。我正在尝试使用npm中的节点zookeeper客户端(Github链接-)

我想了解如何同时使用这个库中可用的getChildren和getData方法

其目的是迭代给定路径的所有子级,获取所有子级的数据,并在转到下一个子级之前同步打印出来

var zookeeper = require('node-zookeeper-client');
var client = zookeeper.createClient('localhost:2181');
var path =  "/Services/Apache";
var tmpChildren = [];

function getChildren(client,path){

console.log('path value received is..', path );
client.getChildren(path, function (error, children, stats) {
    if (error) {
        console.log(error.stack);
        return;
    }

    console.log('Children are: %s', children);
    tmpChildren = String(children).split(",");
    var newPath="";

   for(var i=0; i < tmpChildren.length ; i++)
   {
      newPath = path+'/'+tmpChildren[i];
      console.log('children is %s',tmpChildren[i]);
      var str = client.getData(newPath, function(error,data){
             if (error) {
              return error.stack; 
          }
             return data ? data.toString() : undefined;

      });
      console.log('Node: %s has DATA: %s', newPath, str);
  }

}

);

}

client.once('connected', function () 
    {
    console.log('Connected to the server.');
    getChildren(client,path);


});

client.connect();
如果您看到数据,它将被打印为未定义。我希望每个项目都有正确的数据 要打印的单个子节点,而不是未定义的子节点

有人能帮忙吗?谢谢


PS:数据在client.getData()的函数中打印,但没有分配给变量str。

getData
是一个异步函数,您将无法将值返回给调用方。它将始终是未定义的,因为回调稍后会在不同的堆栈中调用

要打印数据,需要将
console.log
语句放在getData回调函数中。e、 g

  client.getData(newPath, function(error,data){
      if (error) {
          console.log(error.stack); 
          return;
      }

      console.log('Node: %s has DATA: %s', newPath, data ? data.toString() : '');
  });

谢谢你的回复,亚历克斯。但是,有没有其他方法可以在getData方法之外获取值数据?我希望数据在getData方法之外可用,以便使用节点的数据形成JSON。
  client.getData(newPath, function(error,data){
      if (error) {
          console.log(error.stack); 
          return;
      }

      console.log('Node: %s has DATA: %s', newPath, data ? data.toString() : '');
  });