if语句失败时重新运行的功能



我想在我的Discord bot(使用Discord .js)中使用reddit (reddit.com/r/SUBREDDIT/random/.json)的随机api。获取图像工作得很好,直到帖子不包括一个有效的链接,但我希望它在一个函数在一个单独的文件与其他api相关的东西。我的api.js中的函数是:

module.exports.randomReddit = async function randomReddit(reddit) {
return new Promise((res, rej) => {
axios.get(`https://www.reddit.com/r/${reddit}/random/.json`)
.then(function (response) {
res(response[0].data.children[0].data);
})
.catch(function (error) {
rej(error);
})
})
}

在我的代码中,我现在有:

for (let i = 0; i < 10; i++) {
randomReddit('car').then(data => {
let regex = /.(jpg|gif|png)$/;
let test = regex.test(data.url);
if (test) message.channel.send(data.url)

continue;
})
}

随机的reddit帖子并不总是包含有效的链接。我想运行函数(randomReddit)再次当一个帖子没有一个,直到一个帖子确实有一个有效的链接。在这种情况下,图像可能会被发送。我尝试了几种不同的方法,但它们根本不起作用。

提前谢谢你。

使用promise-retry之类的库如何

async function randomReddit(reddit) {
return new Promise((res, rej) => {
axios.get(`https://www.reddit.com/r/${reddit}/random/.json`)
.then(function (response) {
res(response[0].data.children[0].data);
})
.catch(function (error) {
rej(error);
})
})
}
promiseRetry(function (retry) {
return randomReddit('test')
.then(data => {
let regex = /.(jpg|gif|png)$/;
let test = regex.test(data.url);
if (test) return data;

return retry();
})
}).then(function (value) {
// Do smthg
});

最新更新