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)