2016-04-23 74 views
0

这是一个函数,只有当该目录不存在时才创建一个目录。这里我使用fs.mkdirSync函数来创建目录。通常,如果目录创建成功,则此函数返回值undefined,否则如果创建失败,则返回错误消息。 我已经使用if条件处理了承诺解析和拒绝方法。在我的home目录中,没有名为Projectstest的目录。当我运行与dirName,/home/srinesh/Projects/test/hello功能,在这种情况下,createDir产生一个错误。但是,我正在努力解决的问题是,错误消息不包含createDir error字符串,它告诉它没有通过promisereject函数。最后,我想知道的是如何处理Sync函数的错误promises蓝鸟承诺解决或拒绝不正常工作

错误消息:

Unhandled rejection Error: ENOENT: no such file or directory, mkdir '/home/dazz/Projects/test/hello' 

验证码:

var filePath = '/home/srinesh/Projects/test/hello'; 
var createDir = function (dirName) { 
    return new promise(function (resolve, reject) { 
    var result = fs.mkdirSync(dirName); 
    if(result == undefined){resolve('folder created successfully!');} 
    else {reject('createDir error: '+result);} 
    }) 
}; 

var createProject = function (filePath) { 
     var result = createDir(filePath); 
     console.log(result); 
     }) 
     .catch(function (error) { 
     console.log(error); 
     }); 
}; 
+0

您的'createProject'事件是一个语法错误 - 中间有一个'})'''''',而你在没有任何东西时调用'.catch()'。它是如何看起来像? – Bergi

回答

0

fs.mkdirSync总是返回undefined,一个错误就随便扔的情况。每当您的代码抛出时,您可以将fs.mkdirSync包装在try-catchreject中,但更优雅的解决方案是使用函数fs.mkdir的异步版本,如下所示。

var fs = require('fs'); 

var filePath = __dirname + '/dummyFolder'; 
var createDir = function (dirName) { 
    return new Promise(function (resolve, reject) { 
    var result = fs.mkdir(dirName, (err, folder) => { 
     if (err) { 
      reject(err); 
     } else { 
      resolve("folder created successfully"); 
     } 
    }); 
    }) 
}; 

var createProject = function (filePath) { 
    createDir(filePath) 
     .then(function(val) { 
      console.log(val); 
     }) 
     .catch(function(error) { 
      console.log(error); 
     }); 
}; 


createProject(filePath);