【问题标题】:fs returns undefined after array.foreach loopfs 在 array.foreach 循环后返回 undefined
【发布时间】:2020-12-07 05:29:27
【问题描述】:

我正在尝试使用 fs 库读取文件,然后在迭代后替换一些元素,然后返回组合字符串 但是,该函数返回 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;
    }
}

【问题讨论】:

标签: javascript node.js foreach return fs


【解决方案1】:

也许这会对你有所帮助,我将异步文件读取操作更改为同步操作,并将 forEach 替换为 reduce

该函数使用.reduce 遍历每个produce 元素,请参阅提供的文档链接。 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);
    }
}

【讨论】:

  • 你是救命稻草……不过我想了解你的函数……这就像一个迭代,每次迭代后都会返回一个值??然后将其连接到上一个迭代中的那个......我理解对了吗??
  • 我更新了答案,如果您需要任何帮助,请告诉我。
  • 我刚刚在上面的答案中添加了一个带有链接的解释。方法保持不变。
  • 谢谢。我将再次浏览视频,但此功能有效。
猜你喜欢
  • 2022-11-16
  • 2017-09-09
  • 2020-11-28
  • 1970-01-01
  • 1970-01-01
  • 2019-03-19
  • 2022-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多