node中fileSystem改promise

請注意,fs的大部分函數回調只會返回一個error參數,因此只要判斷error爲false的狀況下就返回成功,不管有沒有第二個參數。
另外exists須要單獨包裝,由於第一個參數就表明返回內容app

const fs = require('fs');
const ab = ['access', 'rename', 'ftruncate', 'chown', 'lchown', 'cmod', 'fchmod', 'stat', 'lstat', 'fstat', 'link', 'symlink',
    'readlink', 'realpath', 'unlink', 'rmdir', 'readdir', 'close', 'open', 'utimes',
    'futimes', 'fsync', 'write', 'read', 'readFile', 'writeFile', 'appendFile', 'mkdir', 'mkdtemp']
// fchown fdatasync mkdtemp rename truncate
ab.forEach(name => {
    if (!fs[name])return;
    exports[name] = (...n) => {
        return new Promise((res, rej) => {
            fs[name](...n, (er,d) => {
                // 這裏判斷請注意不要去判斷d參數
                if (er) rej(er)
                else res(d)
            })
        })
    }
})

exports.exists = (path) => {
    return new Promise((res, rej) => {
        fs.exists(path, (exists) => {
            res(exists);
        })
    });
}
相關文章
相關標籤/搜索