You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:48:05