为了账号安全,请及时绑定邮箱和手机立即绑定

nodejs 承诺给出未处理的承诺拒绝,这似乎得到了正确的处理

nodejs 承诺给出未处理的承诺拒绝,这似乎得到了正确的处理

www说 2023-05-19 14:58:57
问题是我收到 UNhandledPromiseRejection 错误,尽管我认为我已经处理了所有情况。代码从 profileRoutes 流向 Controller,再到错误首先出现的 Utils。在 profileRoutes.js 里面router.get('/:username', async (r, s) => {    try{        let profileData = await getProfileData(r.params.username);        s.json({ success: true, payload: profileData });    }catch(err){        console.log('ending request processing by responding a error');        s.status(500).json({ success: false, message: 'err[0].message' });    }});在 controllers/index.js 里面const fetchQueue = [getUserRepos];async function getProfileData(username) {    let profileData = {};    try{        let results = await Promise.all(fetchQueue.map(item => item(username)));        for (let i = 0; i < results.length; i++) {            profileData[getKeys[i]] = results[i];        }        return profileData;    }catch(err){        console.log('error log in controller/index getProfileData function');        throw err;    }}const getUserRepos = async (username) => {        try {        // const res = await utils.gqlSender(username, 'userRepos', { createdAt });        const res = await utils.gqlSender(username, 'userReposData');        return res.user.repositories;    } catch (err) {        console.log('error log in controller/index getUserRepos function');        throw err;    }};在 utils/index.js 里面const gqlSender = async (username, type, opt = {}) => {        axios.post('', {        query: gqlQuery(username, type, opt) // generates a needed graphQL query    }).then(res => {        if(res.data.errors) {  // this is where the error is recieved and so i reject promise.                                 console.log('bef@@@re');             return Promise.reject (res.data.errors);        }        console.log('###',res.data);        return res.data;    }).catch(err => {        console.log('error in making axios request inside utils/index gqlSender function');        throw err;        // return Promise.reject(err);    });我不认为我错过了任何承诺拒绝。任何帮助表示赞赏。谢谢。
查看完整描述

1 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

您的gqlSender功能不会return拒绝将被拒绝的承诺,因此不会在任何地方处理。你应该写


const gqlSender = (username, type, opt = {}) => {

    return axios.post('', {

//  ^^^^^^

        query: gqlQuery(username, type, opt) // generates a needed graphQL query

    }).then(res => {

        if (res.data.errors) {

            console.log('error in making axios request inside utils/index gqlSender function');

            throw res.data.errors;

        } else {

            console.log('###',res.data);

            return res.data;

         }

    });

};

或者


const gqlSender = async (username, type, opt = {}) => {

//                ^^^^^

    const res = await axios.post('', {

        query: gqlQuery(username, type, opt) // generates a needed graphQL query

    });

    if (res.data.errors) {

        console.log('error in making axios request inside utils/index gqlSender function');

        throw res.data.errors;

    } else {

        console.log('###',res.data);

        return res.data;

     }

}


查看完整回答
反对 回复 2023-05-19
  • 1 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号