【问题标题】:forEach method skips objects while iteratingforEach 方法在迭代时跳过对象
【发布时间】:2021-10-13 05:37:16
【问题描述】:

我正在编写一个函数,该函数接受一个包含一些信息的对象数组,并将该信息写入 JSON 文件。 例如:

    let arr = [
      {
        creator: 'Girchi',
        title: '???? Hello World',
        link: 'https://www.facebook.com/GirchiParty/posts/4693474864037269',
        pubDate: 'Sat, 07 Aug 2021 12:07:42 GMT',
        guid: '9386a170c1f52c7f388a7e1e236957e5',
        isoDate: '2021-08-07T12:07:42.000Z'
     },

     {
        creator: 'Someone else',
        title: '???? Hi World',
        link: 'https://www.facebook.com/GirchiParty/posts/4693474864037269',
        pubDate: 'Sat, 07 Aug 2021 12:07:42 GMT',
        guid: '9386a170c1f52c7f388a7e1e236957e5',
        isoDate: '2021-08-07T12:07:42.000Z'
     }
   ]

等等.. 有 16 个。

应该处理该过程的函数:

function writeTheData(obj) {
    fs.readFile('./assets/data/fb.json', (err, data) => {
        if (err) throw err;
        let newsData = JSON.parse(data);
        newsData[obj.link] = {
            ...newsData[obj.link],
            link: obj.link,
            title: obj.title,
            text: obj.contentSnippet,
            articleDate: obj.pubDate,
            content: obj.content
        };
    
        newsData = JSON.stringify(newsData)
        fs.writeFileSync("./assets/data/fb.json", newsData, (error) => {
          if (error) console.log(error)
          console.log('success');
     })
   })
}

array.forEach(obj => writeTheData(obj));

它将数据写入 JSON 文件,但只写入最后一个对象。例如,如果数组中有 10 个对象,则只会写入第 10 个对象。我不明白这里有什么问题。我该如何解决这个问题?

我认为它可能会覆盖数据,这就是为什么我只看到最后一个对象,但在这部分 newsData[obj.link] 我给他们所有的唯一 ID。

我正在使用一堆模块、请求等,这就是为什么我无法显示我的所有代码。此外,对象还有一些属性,但它们不是英文的,所以我没有包括它们。

【问题讨论】:

  • 尝试使用readFileSync。问题是您在同步方法中组合异步调用,例如 forEach
  • 您应该追加到文件而不是写入文件,因为它会在每次新调用时重写整个内容。
  • 谢谢大家的建议!

标签: javascript node.js


【解决方案1】:

函数 fs.writeFileSync 重写整个文件,因此它通过执行 forEach 使 sans 仅具有列表中的最后一个条目。

您可能希望使用fs.appendFile 来添加文件内容,或者作为变体来累积结果并写入一次。

【讨论】:

  • 谢谢!有效。但现在还有另一个问题。写入对象时,由于JSON中的对象需要用逗号分隔,所以它没有这样做,它只是附加对象,所以这是另一个错误
  • 文件读取一次,写入一次
  • @RazLuvaton 你正在寻找something like this
猜你喜欢
  • 1970-01-01
  • 2013-03-30
  • 2011-08-08
  • 2019-05-23
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 2017-04-25
  • 2014-01-01
相关资源
最近更新 更多