我需要得到zookeeper
中所有znodes
的初始timestamps
。我正在使用node-zookeeper-client的getChildren
方法来执行此操作。我递归地调用我的getInitialTimeStamp
来遍历路径。我 功能看起来像这样我在做这个递归函数时做错了什么,当返回promise时
function getInitialTimeStamp(client,path){
return new Promise((resolve,reject) => {
client.getChildren(
path,
function(error,children,stats){
//if children empty, return
if (typeof children === 'undefined' || children.length <= 0) {resolve();}
timeStamp[path]= {ctime: stats.ctime, mtime: stats.mtime};
children.map(child => {
getInitialTimeStamp(client,path+'/'+child);
});
});
});
}
它被称为像这样
getInitialTimeStamp(client,path)
.then(() => {
console.log(timeStamp);
console.log("finished");
});
问题是我不能让我的.then()
部分运行。我知道这与回诺有关,但我不知道这里做错了什么。考虑我对承诺和async
编程缺乏认识,并为我提供解决方案。
这是不是可以,如果'client.getChildren()'直接promisified简单得多。正如现在这个答案,它缺少错误处理,如果你提出更低的级别,然后使用promise来编程所有的逻辑,那么错误处理几乎是免费的。 – jfriend00
是的,它当然会,那么 –
你怎么promisify client.getChildren()? – Prasanna