为什么以下readFileSync函数返回undefined?

时间:2015-12-07 15:39:31

标签: node.js ecmascript-6

我想从文件夹中读取文件,然后返回结果加上一些xhtml:

#! /usr/bin/env node

var fs = require('fs'),
    files = fs.readdirSync(__dirname + '/files/')

var manifest = function() {
  files.forEach((file) => {
    return `<item href="${file}.html" id="html30" media-type="application/xhtml+xml"/>`
  })
}

console.log(manifest())
但是,{p> console.log(manifest())返回undefined。不确定原因,因为console.log(contents)返回结果:

foo 1

foo 2

foo 3

1 个答案:

答案 0 :(得分:1)

forEach返回字符串不会分配任何内容,因为ForEach不会产生任何副作用。来自mdn

  

forEach()为每个数组元素执行一次回调函数;与map()或reduce()不同,它总是返回undefined值并且不可链接。典型的用例是在链的末尾执行副作用。

您需要reduce覆盖您的文件(变成字符串)或改变变量。

var manifest = function() {
  return files.reduce((items, file) => {
    let contents = fs.readFileSync(__dirname + '/files/' + file, 'utf8')
    return items + `<item href="${file}.html" id="html30" media-type="application/xhtml+xml"/>`
  }, '');
}