【问题标题】:How do I put info about messages fetched from the channel to a JSON file?如何将有关从通道获取的消息的信息放入 JSON 文件?
【发布时间】:2019-12-12 10:02:25
【问题描述】:

所以我想从特定频道获取所有嵌入消息,并在其描述中写入标签。

我开始使用channel.fetchMesssages() 获取嵌入式和简单消息并解析承诺。我得到了集合,我可以将消息的值一个接一个地打印到控制台,但我不能将它们添加到对象中然后将它们保存为 JSON 文件。

代码如下:

var news = client.channels.get('id')
var specialMessages = new Object()

news.fetchMessages()
    .then(messages => {
        messages.forEach((m, i) => {
            specialMessages[m.content] = m.id
        })
    })

console.log(specialMessages)
fs.writeFileSync('messages.json', JSON.stringify(specialMessages, null, 2))

问题是我似乎没有向specialMessages 添加任何内容,因为它只向控制台输出{}。它背后的魔力是什么?

【问题讨论】:

  • 如果您认为某个答案解决了问题,请单击绿色复选标记将其标记为“已接受”。这有助于将注意力集中在仍然没有答案的旧 SO。

标签: javascript node.js json discord.js


【解决方案1】:

console.log()获取消息之前执行,因为后者的操作是异步的并且不会立即完成(了解Promises)。

您应该将console.log(...)fs.writeFileSync(...) 行紧跟在forEach() 循环之后,但在.then() 块的scope 内。

【讨论】:

    【解决方案2】:

    使用.map()

    var news = client.channels.get('id');
    
    news.fetchMessages()
        .then(messages => {
            fs.writeFileSync('messages.json', JSON.stringify(messages.map(m => m.id), null, 2));
        });
    

    【讨论】:

      【解决方案3】:

      这应该可以工作

      (async () => {
        const news = client.channels.get('id');
        const specialMessages = {};
      
        const messages = await news.fetchMessages();
        messages.forEach((m, i) => {
           specialMessages[m.content] = m.id;
        });
        console.log(specialMessages);
        fs.writeFileSync('messages.json', JSON.stringify(specialMessages, null, 2));
      })();
      

      【讨论】:

        【解决方案4】:

        您的 specialMessages 是 {} 原因文件未完成。在文件完成后尝试 console.log 或使用回调、异步。

        var news = client.channels.get('id')
        var specialMessages = new Object()
        
        news.fetchMessages()
            .then(messages => {
                messages.forEach((m, i) => {
                    specialMessages[m.content] = m.id
                })
            })
        
        fs.writeFileSync('messages.json', JSON.stringify(specialMessages, null, 2))
        console.log(specialMessages)
        

        【讨论】:

          猜你喜欢
          • 2017-11-12
          • 1970-01-01
          • 2021-12-04
          • 2015-08-25
          • 2012-11-25
          • 1970-01-01
          • 1970-01-01
          • 2021-10-20
          • 1970-01-01
          相关资源
          最近更新 更多