如何使用Promise累加多个返回值,替换回调实现三个txt文件内容拼接
实现方案
你需要先将回调风格的fs.readFile封装为返回Promise的方法,再通过.then()链式调用依次读取文件、累加内容即可,具体实现如下:
方法1:手动封装Promise
const fs = require('fs') // 封装返回Promise的文件读取方法 function readFilePromise(path, encoding) { return new Promise((resolve, reject) => { fs.readFile(path, encoding, (err, data) => { if (err) return reject(err) resolve(data) }) }) } let content = '' readFilePromise('./a.txt', 'utf8') .then(data => { content += data // 返回下一个文件读取的Promise,交给后续then处理 return readFilePromise('./b.txt', 'utf8') }) .then(data => { content += data return readFilePromise('./c.txt', 'utf8') }) .then(data => { content += data console.log(content) }) // 统一捕获所有读取环节的错误 .catch(err => console.log(err))
方法2:使用Node.js内置的fs/promises模块
Node.js v10之后官方自带了Promise版本的fs方法,无需自己封装,直接调用即可:
const fs = require('fs/promises') let content = '' fs.readFile('./a.txt', 'utf8') .then(data => { content += data return fs.readFile('./b.txt', 'utf8') }) .then(data => { content += data return fs.readFile('./c.txt', 'utf8') }) .then(data => { console.log(content + data) }) .catch(err => console.log(err))
说明
这种写法将原本嵌套的回调逻辑拉平为链式结构,可读性更高,且所有异步环节的错误都可以通过末尾的.catch()统一处理,不需要在每个读取回调中单独判断错误。
内容的提问来源于stack exchange,提问作者Lee Alex
相关产品推荐
相关产品推荐

