封装读取文件的方法,引入promise

// 需求:封装一个方法,传一个路径,返回文件内容

const path = require('path')
const fs = require('fs')

// 读取文件
// fs.readFile(path.join(__dirname, './1.txt'), 'utf-8', function (err, data) {
//     if (err) {
//         throw err
//     } else {
//         console.log(data)
//     }
// })

// 封装  错误方法 readFile方法是异步的,不会等它执行完函数就已经返回了
// 没有指定return,返回undefined,必须用回调函数
// var getContent = function (myPath) {
//     fs.readFile(myPath, 'utf-8', function (err, data) {
//             if (err) {
//                 throw err
//             } else {
//                 return data
//             }
//     })
// }

// var myPath = path.join(__dirname, './1.txt')
// var data = getContent(myPath)
// console.log(data)


// var getContent = function (myPath, callback) {
//     fs.readFile(myPath, 'utf-8', function (err, data) {
//             if (err) {
//                 callback(err)
//             } else {
//                 callback(null, data)
//             }
//     })
// }

// var myPath = path.join(__dirname, './1.txt')
// var data = getContent(myPath, function (err, data) {
//     if (err) {
//         console.log(err)
//         return
//     }
//     console.log(data)
// })


// 封装简化版,传两个回调,成功时执行第一个,失败时执行第二个
var getContent = function (myPath, success, err) {
    fs.readFile(myPath, 'utf-8', function (err, data) {
            if (err) {
                err(err)
            } else {
                success(data)
            }
    })
}
var myPath = path.join(__dirname, './1.txt')
var data = getContent(myPath, function (data) {
    console.log(data)
}, function (err) {
    console.log(err)
})


// 如果要读取多个文件,不能保证文件的读取顺序,引入promise回调

promise的使用:

const fs = require('fs')
const path = require('path')
var getData = function (path) {
    var promise = new Promise(function (resolve, reject) {
        fs.readFile(path, 'utf-8', function (err, data) {
            if (err) {
                reject(err)
                return
            } 
            resolve(data)
        })
    })
    // 返回这个实例
    return promise
}
// promise实例在创建的时候就会立即执行里面的函数和函数里面的异步方法
var p = getData('./1.txt')
p.then(function (data) {
    console.log(data)
    // 再返回这个实例
    return getData('./2.txt')
}).then(function (data) {
    console.log(data)
    return getData('./3.txt')
}).then(function (data) {
    console.log(data)
}).catch(function (err) {
    // 前面要是有函数执行失败了,就结束后面的执行,并处理这个错误
    console.log(err.message)
})

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值