我使用蓝鸟魔法
var fs = Promise.promisifyAll(require('fs'));
并使用
fs.readdirAsync(dest).then(function (val) {
return val;
}).then(function (file) {
...
我的问题是以下代码(工作正常)我应该使用相同的和如何使用
我在谈论mkdir
函数。
function createDir(folder) {
return function (req, res, next) {
if (typeof require.cache.per === 'undefined') {
require.cache.per = {};
require.cache.per.mk = false;
}
if (!require.cache.per.mk) {
fs.mkdir(folder, function (e) {
if (!!e && e.code !== 'EEXIST') {
console.log('Error to create folder: ' + err);
}
require.cache.per.mk = true;
next();
});
} else {
next();
}
};
}
我的问题是我应该在这里使用诺言,推荐什么? 代码按预期工作......
答案 0 :(得分:6)
Promise简化并统一界面。 .promisify()
或.promisifyAll()
都可以解决问题。
然后你可以链接这样的一切:
fs.mkdir(dir)
.then(function success(dir) {
...
})
.catch(function failure(err) {
...
})
.finally(function () {
});
但是在node.js
中,最重要的是不阻止I / O.使用Promise或常规异步/回调并不重要,只要它不阻塞主线程。
在脚本中创建要在shell中运行的同步代码是可以的,但对于常规应用程序,您不应该故意使用阻塞I / O操作。
答案 1 :(得分:0)
Promise.promisifyAll(fs);
return fs.mkdirAsync(dir1)
.then(function() {
return fs.mkdirAsync(dir2);
})
.then(function() {
return fs.mkdirAsync(dir3);
})
希望这有帮助。
答案 2 :(得分:0)
我肯定会更新您的代码以保持一致。如果可能,请拨打mkdirAsync
而不是mkdir
示例(来自OP的代码):
var fs = Promise.promisifyAll(require('fs'));
// ...
fs.mkdirAsync(folder)
.catch({ code: 'EEXIST' }, function(e){
// don't care about this error code
})
.catch(function(e) {
console.log('Error to create folder: ' + e);
})
.then(function(){
require.cache.per.mk = true;
next();
});