以下功能通過XML-RPC我的服務器上創建新的文件夾執行承諾遞歸的NodeJS
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;
}
功能成功地創建一個新的文件夾 但是,如果文件夾已經存在,我想觸發此功能再次遞歸地與新的文件夾命名並返回它的承諾,以便每當這個函數被調用,它會返回文件夾名稱並不重要是如何執行的次數
像
createFolder('directory').then(function(resp){
console.log(resp);// may return directory || directory1 .... etc
});
**編輯** 所以我manged通過將延遲對象來實現這一 讓我知道是否有實現這一
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(...);'? – thefourtheye
「*我通過傳遞延遲對象*來實現這一目標」 - 一個可怕的想法。它甚至會更好做'defer.resolve(createFolder(folder_name + Math.floor(Math.random()* 100)));' – Bergi
謝謝我會嘗試重構代碼並按照你的方法 – ahhmarr