我应该为 mkdir 使用 promise
Should I use promise for mkdir
我用的是蓝鸟魔法
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();
}
};
}
我的问题是我是否应该在这里使用 promise,推荐什么?
代码按预期工作...
Promise.promisifyAll(fs);
return fs.mkdirAsync(dir1)
.then(function() {
return fs.mkdirAsync(dir2);
})
.then(function() {
return fs.mkdirAsync(dir3);
})
希望对您有所帮助。
我肯定会更新您的代码以保持一致。如果可能,请调用 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();
});
Promise 简化并统一了界面。 .promisify()
或 .promisifyAll()
都可以。
然后你可以像这样链接所有东西:
fs.mkdir(dir)
.then(function success(dir) {
...
})
.catch(function failure(err) {
...
})
.finally(function () {
});
但是在 node.js
中,最重要的是不要阻止 I/O。使用 Promise 还是常规 async/callback 并不重要,只要它不阻塞主线程即可。
在脚本中包含您想要 运行 在 shell 中的同步代码是可以的,但对于常规应用程序,您永远不应故意使用阻塞 I/O 操作。
我用的是蓝鸟魔法
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();
}
};
}
我的问题是我是否应该在这里使用 promise,推荐什么? 代码按预期工作...
Promise.promisifyAll(fs);
return fs.mkdirAsync(dir1)
.then(function() {
return fs.mkdirAsync(dir2);
})
.then(function() {
return fs.mkdirAsync(dir3);
})
希望对您有所帮助。
我肯定会更新您的代码以保持一致。如果可能,请调用 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();
});
Promise 简化并统一了界面。 .promisify()
或 .promisifyAll()
都可以。
然后你可以像这样链接所有东西:
fs.mkdir(dir)
.then(function success(dir) {
...
})
.catch(function failure(err) {
...
})
.finally(function () {
});
但是在 node.js
中,最重要的是不要阻止 I/O。使用 Promise 还是常规 async/callback 并不重要,只要它不阻塞主线程即可。
在脚本中包含您想要 运行 在 shell 中的同步代码是可以的,但对于常规应用程序,您永远不应故意使用阻塞 I/O 操作。