如题,主要是为了练习一下promise的使用。之前一直不知道promise对象的then
函数还可以返回promise对象,以便达到链式调用的效果。
下面上代码,以记之~~~
var fs = require('fs');
var path = require('path');
function readdirPromisify(dir) {
return new Promise((resolve, reject) => {
fs.readdir(dir, (err, list) => {
if (err) {
reject(err);
}
resolve(list);
});
});
}
function statPromisify(dir) {
return new Promise((resolve, reject) => {
fs.stat(dir, (err, stats) => {
if (err) {
reject(err);
}
resolve(stats);
});
});
}
function listDir(dir) {
return statPromisify(dir).then(stats => {
if (stats.isDirectory()) {
return readdirPromisify(dir).then(list =>
Promise.all(list.map(item =>
listDir(path.resolve(dir, item))
))
).then(subtree => [].concat(...subtree));
} else {
return [dir];
}
});
}