請注意,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); }) }); }