![](/img/trans.png)
[英]Difference between new Promise and Promise.resolve/reject in bluebird
[英]Bluebird promise resolve or reject not working properly
這是一個僅在目錄不存在時才創建目錄的功能。 在這里,我使用fs.mkdirSync
函數創建目錄。 通常,如果目錄創建成功,則此函數返回undefined
值;如果創建失敗,則返回錯誤消息。 我已經處理了使用if
條件的promise解析和拒絕方法。 在我的home
目錄中,沒有名為Projects
和test
目錄。 當我使用dirName
, /home/srinesh/Projects/test/hello
運行該函數時,在這種情況下, createDir
生成錯誤。 但是我正在努力解決的問題是,錯誤消息不包含createDir error
字符串,該createDir error
字符串表明它沒有通過promise
的reject
函數。 最后,我想知道的是如何使用promises
處理Sync
函數的錯誤。
錯誤信息:
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);
});
};
fs.mkdirSync
始終返回undefined
,如果發生錯誤,它將拋出該錯誤。 您可以將fs.mkdirSync
包裝在try-catch
並在代碼拋出時reject
,但是更優雅的解決方案是使用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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.