2015-01-11 81 views
0

我想在服務器中創建一個目錄。但是想檢查一個已經存在的名稱是否已經存在。如果不存在目錄,則使用提供的名稱創建一個目錄。否則,將隨機字符串附加到提供的名稱,並重新檢查是否存在新名稱。Node.js:如何從其回調再次調用函數

到目前爲止,我可以編寫一個函數執行初始檢查並創建一個函數,如果它不存在的話。但是如果目錄存在,不知道再次運行檢查。

var outputDir = __dirname + '/outputfiles/' + values.boxname; 

function ensureExists(path, mask, cb) { 
    if (typeof mask == 'function') { 
     cb = mask; 
     mask = 484; 
    } 
    fs.mkdir(path, mask, function(err) { 
     if (err) { 
      cb(err); 
     } else cb(null); // successfully created folder 
    }); 
} 

,並調用函數

ensureExists(outputDir, 484, function(err) { 
    if (err) { 
     if (err.code == 'EEXIST') { 
      var outputDir = outputDir + '-' + Date.now(); 
      // NEED Help here to call this function again to run the check again 
      return console.log("A Folder with same name already exists"); 
     } else { 
      console.err(err); 
     }; 
    } else { 
     console.log("Folder created"); 
    } 
}); 

等等,總之我想創建獨特的服務器目錄names..please幫我解決這個problem..thanks

+0

問題再次調用函數? – Bazinga

+0

我不確定是什麼問題。 – thefourtheye

回答

0
function callback(err) { 
    if (err) { 
     if (err.code == 'EEXIST') { 
      var outputDir = outputDir + '-' + Date.now(); 
      // NEED Help here to call this function again to run the check again 
      ensureExists(outputDir, 484, callback); // Call again 
      return console.log("A Folder with same name already exists"); 
     } else { 
      console.err(err); 
     }; 
    } else { 
     console.log("Folder created"); 
    } 
} 
ensureExists(outputDir, 484, callback); // Call first 

或者您可以將功能合併爲一個:

function ensureExists(path, mask, cb) { 
    if (typeof mask == 'function') { 
     cb = mask; 
     mask = 484; 
    } 
    fs.mkdir(path, mask, function(err) { 
     if (err) { 
      if (err.code == 'EEXIST') { 
       var newpath = path + '-' + Date.now(); 
       ensureExists(newpath, mask, cb); // rerun with new path 
       console.log("A Folder with same name already exists"); 
      } else { 
       console.err(err); 
      }; 
     } else cb(path); // successfully created folder 
    }); 
} 
+0

請注意,我使用路徑調用cb()來告訴回調新目錄是什麼。 – ambrosechua