fs returns 在 array.foreach 循环后未定义
fs returns undefined after array.foreach loop
我正在尝试使用 fs 库读取文件然后在迭代后替换一些元素然后 return 组合字符串
但是,函数 returns undefined
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;
}
}
也许这会对您有所帮助,我将异步文件读取操作更改为同步操作,并将 forEach
替换为 reduce
该函数使用 .reduce 遍历每个 produce
元素,请参阅提供的文档 link。 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 库读取文件然后在迭代后替换一些元素然后 return 组合字符串 但是,函数 returns undefined
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;
}
}
也许这会对您有所帮助,我将异步文件读取操作更改为同步操作,并将 forEach
替换为 reduce
该函数使用 .reduce 遍历每个 produce
元素,请参阅提供的文档 link。 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);
}
}