01 fs模組
阿新 • • 發佈:2020-07-14
1 fs.readFile
非同步執行函式
/** fs 讀取檔案相對路徑是相對終端命令列所在的路徑 process.cwd()返回終端命令列的絕對路徑 * */ fs = require('fs') fs.readFile('./static/1.txt', (err, data) => { if (err) { console.log(err.message); return } console.log(data); //二進位制 console.log(data.toString()); //二進位制轉字串 }) // 如果指定了編碼格式,data就直接是字串 ./可以省略'static/test/test.js'=='./static/test/test.js'fs.readFile('static/test/test.js', 'utf8', (err, data) => { if (err) return console.log(data); })
// 要求:在第一個非同步任務讀取成功之後再讀取第二個非同步任務, 第二成功後,在讀取第三個非同步任務 const fs = require('fs'); fs.readFile('./static/1.txt', (err, data) => { if (err) throw err console.log(data.toString()); fs.readFile('./static/2.txt', (err, data) => { if (err) throw err console.log(data.toString()); fs.readFile('./static/3.txt', (err, data) => { if (err) throw err console.log(data.toString()); }) }) })
promise 管理下
new Promise((resolve, reject) => { fs.readFile('./static/1.txt', (err, data) => {if (err) reject(err) else resolve(data) }) }).then(data => { console.log(data.toString()); return new Promise((resolve, reject) => { fs.readFile('./static/2.txt', (err, data) => { err ? reject(err) : resolve(data) }) }) }).then(data => { console.log(data.toString()); return new Promise((resolve, reject) => { fs.readFile('./static/3.txt', (err, data) => { err ? reject(err) : resolve(data) }) }) }).then(data => console.log(data.toString())).catch(err => console.log(err.message))
封裝讀取promise的fs.readFile
function getFileByPath(path) { return new Promise((resolve, reject) => { fs.readFile(path, (err, data) => { err ? reject(err) : resolve(data) }) }) } getFileByPath('./static/1.txt').then(data => { console.log(data.toString()); return getFileByPath('./static/2.txt') }).then(data => { console.log(data.toString()); return getFileByPath('./static/3.txt') }).then(data => console.log(data.toString())).catch(err => console.log(err))
//Promise.all([promise1,promise2,...])返回一個新的promise物件,只有都成功才執行then 返回資料也是一個數組 ,只要其中有一個失敗,就直接走了catch //適合頁面發起多個ajax請求 const promise1 = getFileByPath('./static/1.txt') const promise2 = getFileByPath('./static/2.txt') const promise3 = getFileByPath('./static/3.txt') Promise.all([promise1, promise2, promise3]).then(data => console.log(data)).catch(err => console.log(err.message))
async function fn() { const data1 = await promise1 const data2 = await promise2 const data3 = await promise3 return [data1.toString(), data2.toString(), data3.toString()] } fn().then(data => console.log(data)).catch(err => err)