Warm tip: This article is reproduced from serverfault.com, please click

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

(javascript - Re-running function when if-statement fails)

发布于 2021-01-20 11:27:06

我想在我的 Discord 机器人(使用 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),直到帖子确实有一个有效链接。在这种情况下,可以发送图像。我尝试了一些不同的东西,但它们根本不起作用..

先感谢你。

Questioner
Exstare
Viewed
0
Léo Martin 2021-01-20 19:32:41

使用像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
});