Javascript fs在array.foreach循环后返回未定义
我试图使用fs库读取一个文件,然后在迭代后替换一些元素,然后返回合成的字符串 但是,该函数返回未定义的Javascript fs在array.foreach循环后返回未定义,javascript,node.js,foreach,return,fs,Javascript,Node.js,Foreach,Return,Fs,我试图使用fs库读取一个文件,然后在迭代后替换一些元素,然后返回合成的字符串 但是,该函数返回未定义的 function concatproduce(order, producestring) { if (order.cart.produce[0].productid != null) { order.cart.produce.forEach((element, index) => { if (!element.delstatus) {
function concatproduce(order, producestring) {
if (order.cart.produce[0].productid != null) {
order.cart.produce.forEach((element, index) => {
if (!element.delstatus) {
element.delstatus = 'Pending';
}
fs.readFile('controllers/ordercartitemtemplate.html', 'utf8', function(err, data) {
if (err) {
return console.log('lima' + err);
}
//console.log(data)
producestring += (data
.replace('//Filename//', element.imageURL)
.replace('//Prodname//', element.producename)
.replace('//Quantity//', element.quantity)
.replace('//Price//', element.price)
.replace('//Total//', element.total)
.replace('//Delstatus//', element.delstatus));
});
});
return producestring;
}
}
也许这会对您有所帮助,我将异步文件读取操作更改为同步操作,并用reduce替换了forEach 该函数使用遍历每个product元素,请参阅提供的文档链接。readFileAsync用于轻松处理文件读取的结果,并在每次迭代后将其分配给producestring
function concatproduce(order, producestring) {
if (order.cart.produce[0].productid != null) {
return order.cart.produce.reduce((producestring, element) => {
if (!element.delstatus) {
element.delstatus = 'Pending';
}
try {
const data = fs.readFileSync('controllers/ordercartitemtemplate.html', 'utf8')
producestring += (data
.replace('//Filename//', element.imageURL)
.replace('//Prodname//', element.producename)
.replace('//Quantity//', element.quantity)
.replace('//Price//', element.price)
.replace('//Total//', element.total)
.replace('//Delstatus//', element.delstatus));
return producestring;
} catch (err) {
console.log('lima' + err);
return producestring;
}
}, producestring);
}
}
fs.readFile是异步的。因此,fs.readFile的回调在执行返回的producestring之前不会调用,这就是为什么它总是返回undefined。我建议你花点时间看这部电影,否则你就是一个救生员。。。但是我想了解你的功能。。。这就像每次迭代后都返回一个值的迭代??然后将它连接到上一次迭代中的一个。。。我明白了吗?我更新了答案,如果你需要帮助,请告诉我。前面的答案已经起作用了。我只是在上面的答案中添加了一个带有链接的解释。方法不变,谢谢。我会再看一遍视频,但是这个功能起作用了。