如何将有关从通道获取的消息的信息放入 JSON 文件?
Posted
技术标签:
【中文标题】如何将有关从通道获取的消息的信息放入 JSON 文件?【英文标题】:How do I put info about messages fetched from the channel to a JSON file? 【发布时间】: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。 【参考方案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)
【讨论】:
以上是关于如何将有关从通道获取的消息的信息放入 JSON 文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何将机器人消息发送到一台服务器中的多个通道(阅读正文以获取更多信息)
REACT 中的 fetch() 失败,没有 statusText 也没有 json 正文。如何获取有关错误的额外信息?