【问题标题】:Need help figuring out why xxx.catch isn't catching the error需要帮助弄清楚为什么 xxx.catch 没有发现错误
【发布时间】:2019-07-03 23:24:11
【问题描述】:

我快要把我的电脑扔出窗外了。我只是不明白为什么这不起作用:

async function play(message, msg) {
    addytb(message, msg[3]).catch(err => {console.log('err');});
}

async function addytb(message, url) {
    ytbapi.getVideo(url)
    .then(video => {
        message.channel.send(`J'ai ajouté ${video.title} à la queue !`);
        queue.get(message.guild.id).push({"url": url, "type": 'youtube', "title": video.title});
    })
    .catch(() => {
        message.channel.send(`J'ai pas réussi à ajouter ça à la queue !`);
        throw 'error';
    });
}

我已经在互联网上搜索了 2 个小时,但我找不到为什么我一直有未处理的承诺变暖。我认为这是因为 ytbapi.getVideo() 是异步的,但我不知道该怎么做。

谢谢。

【问题讨论】:

  • 为什么在代码中使用async关键字,然后使用.then.catch
  • 我尝试了几种解决方案,并没有在发布前删除异步。我知道他们在那里什么也没做。

标签: javascript node.js try-catch


【解决方案1】:

首先,除非您在其中等待异步函数,否则无需对函数使用“async”关键字。 我对代码做了一些改动,你可以试试:

function play(message, msg) {
    addytb(message, msg[3])
        .then((data) => {
            //do something with data
        })
        .catch(err => {
            console.log('err is: ', err);
        });
}

function addytb(message, url) {
    return new Promise((resolve, reject) => {
        ytbapi.getVideo(url)
            .then(video => {
                message.channel.send(`J'ai ajouté ${video.title} à la queue !`);
                queue.get(message.guild.id).push({
                    "url": url,
                    "type": 'youtube',
                    "title": video.title
                });
                resolve("success");
            })
            .catch((err) => {
                message.channel.send(`J'ai pas réussi à ajouter ça à la queue !`);
                console.log(err)
                reject(err);
            });
    });
}

如果你真的想尝试 async/await:

async function play(message, msg) {
    try {
        const data = await addytb(message, msg[3]);
        //do something with data
    } catch (err) {
        console.log('err is: ', err);
    }
}

function addytb(message, url) {
    return new Promise(async (resolve, reject) => {
        try {
            const video = await ytbapi.getVideo(url);
            message.channel.send(`J'ai ajouté ${video.title} à la queue !`);
            queue.get(message.guild.id).push({
                "url": url,
                "type": 'youtube',
                "title": video.title
            });
            resolve("success");
        } catch (err) {
            message.channel.send(`J'ai pas réussi à ajouter ça à la queue !`);
            console.log(err)
            reject(err);
        }
    });
}

ps:您可能需要进行一些修改,因为我没有机会尝试代码。 希望这会有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    相关资源
    最近更新 更多