当 if 语句失败时重新 运行 函数
Re-running function when if-statement fails
我想在我的 Discord 机器人中使用来自 reddit (reddit.com/r/SUBREDDIT/random/.json) 的随机 api(使用 discord.js)。在 post 不包含有效的 link 之前获取图像工作正常,但我希望它与其他 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 post 并不总是包含有效的 link。当 post 没有一个直到 post 确实有一个有效的 link 时,我想再次 运行 函数 (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
});
我想在我的 Discord 机器人中使用来自 reddit (reddit.com/r/SUBREDDIT/random/.json) 的随机 api(使用 discord.js)。在 post 不包含有效的 link 之前获取图像工作正常,但我希望它与其他 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 post 并不总是包含有效的 link。当 post 没有一个直到 post 确实有一个有效的 link 时,我想再次 运行 函数 (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
});