首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要帮助找出为什么xxx.catch没有捕捉到错误

我需要帮助找出为什么xxx.catch没有捕捉到错误
EN

Stack Overflow用户
提问于 2019-07-04 07:24:12
回答 1查看 112关注 0票数 0

我都快把我的电脑扔出窗外了。我就是不明白为什么这不管用:

代码语言:javascript
复制
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()是异步的,但是我不知道该怎么做。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-04 15:10:06

第一件事是不需要在函数中使用'async‘关键字,除非你在里面等待一个异步函数。我对代码做了一些修改,你可以试试:

代码语言:javascript
复制
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);
            });
    });
}

如果你真的想尝试异步/等待:

代码语言:javascript
复制
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:你可能需要一些修改,因为我没有机会尝试代码。希望这能有所帮助:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56879011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档