需要帮助找出xxx.catch为什么没有捕获错误的原因

时间:2019-07-03 23:24:11

标签: javascript node.js try-catch

我正要把我的电脑从窗户扔出去。我只是看不到为什么这不起作用:

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()是异步的,但我不知道该怎么办。

谢谢。

1 个答案:

答案 0 :(得分:0)

首先,除非您正在等待其中的异步函数,否则无需在函数中使用'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 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:您可能需要进行一些修改,因为我没有机会尝试代码。 希望这会有所帮助:)