【问题标题】:Re-running function when if-statement failsif 语句失败时重新运行函数
【发布时间】:2021-04-24 18:20:41
【问题描述】:

我想在我的 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)。在这种情况下,可以发送图像。我尝试了一些不同的方法,但它们根本不起作用..

提前谢谢你。

【问题讨论】:

    标签: javascript function if-statement discord.js reddit


    【解决方案1】:

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

    【讨论】:

    • 稍作修改,就可以了。谢谢!
    猜你喜欢
    • 2017-12-30
    • 2020-11-17
    • 2018-02-02
    • 2019-01-26
    • 2022-01-11
    • 2021-10-17
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多