据说随机 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 一遍又一遍地返回相同的东西的主要内容,如果未能解决你的问题,请参考以下文章