【发布时间】:2015-11-14 02:50:06
【问题描述】:
以下函数通过 xmlrpc 在我的服务器上创建新文件夹
var createFolder = function(folder_name) {
var defer = Q.defer();
client.methodCall('create_folder', [sessionID, folder_name], function(err, resp) {
if (err) {
if (err.responseString && err.responseString.match('already exist')) {
//call the same function recursively with folder_name+Math.round(Math.random()*100)
} else {
defer.reject(err);
}
} else {
defer.resolve(folder_name);
}
});
return defer.promise;
}
函数成功创建新文件夹 但是,如果文件夹已经存在,我想用新的文件夹名称再次递归地触发这个函数,然后在 promise 中返回它,这样无论何时调用这个函数,它都会返回文件夹名称,不管它执行了多少次
类似
createFolder('directory').then(function(resp){
console.log(resp);// may return directory || directory1 .... etc
});
**编辑** 所以我设法通过传递延迟对象来实现这一点 让我知道是否有更优雅的方法来实现这一目标
var createFolder = function(folder_name,defer) {
defer =defer || Q.defer();
client.methodCall('create_folder', [sessionID, folder_name], function(err, resp) {
if (err) {
if (err.responseString && err.responseString.match('already exist')) {
return createFolder(folder_name+Math.round(Math.random()*100,defer)
} else {
defer.reject(err);
}
} else {
defer.resolve(folder_name);
}
});
return defer.promise;
}
【问题讨论】:
-
return createFolder(...);? -
“我设法通过传递延迟对象来实现这一目标” - 一个可怕的想法。这样做会更好
defer.resolve(createFolder(folder_name+Math.floor(Math.random()*100))); -
谢谢,我会尝试重构代码并遵循您的方法
标签: node.js recursion promise xml-rpc q