据说随机 API 一遍又一遍地返回相同的东西

Posted

技术标签:

【中文标题】据说随机 API 一遍又一遍地返回相同的东西【英文标题】:Supposedly random API returning same thing over and over 【发布时间】:2021-01-15 15:03:32 【问题描述】:

我正在制作一个不和谐的机器人,它显示来自https://belikebill.ga/billgen-API.php 的随机图像 代码很简单

module.exports = 
    name: 'belikebill',
    description: 'Gives a random "Be like Bill" meme',
    async execute(message) 
        if (message.content.toLowerCase() === '$belikebill') 
            message.channel.send('https://belikebill.ga/billgen-API.php?default=1')
        
    

我尝试过处理 axios 请求并将其嵌入,但没有任何改变。

如何随机化?

【问题讨论】:

【参考方案1】:

可能是https://belikebill.ga/billgen-API.php?default=1 处的图像正在被客户端缓存,类似于以下 sn-p 中发生的情况:

<img src="https://belikebill.ga/billgen-API.php?default=1">
<img src="https://belikebill.ga/billgen-API.php?default=1">

尝试在末尾添加一个随机查询字符串,以确保每次都发出新请求:

message.channel.send('https://belikebill.ga/billgen-API.php?default=1&random=' + Math.random())

<img src="https://belikebill.ga/billgen-API.php?default=1&random=0.123">
<img src="https://belikebill.ga/billgen-API.php?default=1&random=0.456">

如果您担心重复的随机数,请改为跟踪索引:

let index = 0;
module.exports = 
    name: 'belikebill',
    description: 'Gives a random "Be like Bill" meme',
    async execute(message) 
        if (message.content.toLowerCase() === '$belikebill') 
            message.channel.send('https://belikebill.ga/billgen-API.php?default=1&extra=' + index++)
        
    

【讨论】:

Date.now()performance.now() 使 IMO 成为更好的缓存清除器。 Math.random() 不保证不会重复 @Phil Date.now 的一个问题是,如果同时调用两次,它可能会重复。 Math.random 可能会重复,但不会经常重复(比 API 自然重复的频率要少得多)。我想如果这是一个问题,人们可以跟踪一个在每次调用时都会增加的持久索引 @CertainPerformance 你能说我之前被随机数 "uuids" 咬过?

以上是关于据说随机 API 一遍又一遍地返回相同的东西的主要内容,如果未能解决你的问题,请参考以下文章

为啥这不会一遍又一遍地返回一个新值?爪哇

命名管道未按预期工作。一遍又一遍地阅读相同的消息

一遍又一遍地运行相同的junit测试的简单方法?

GGplot多个页面一遍又一遍地打印相同的第一个图

试图将200个jpg文件转换为带有ImageMagick的mp4。一遍又一遍地接收相同的错误

为啥 OnPreRender 被一遍又一遍地调用?