如果另一个API没有数据,则仅使用一个API

时间:2018-08-31 06:37:18

标签: javascript api asynchronous

const getUser = async (user) => {
    const body = await snekfetch.get('https://www.website.com/api/public/users?name=' + user);
    const userInfo = JSON.parse(body.text);
    const r = await snekfetch.get('https://www.website.com/api/public/users/' + userInfo.uniqueId + '/profile');
    const extraUserInfo = JSON.parse(r.text);
    const _message = await client.users.get('437502925019807744').send({ files: ['https://www.website.nl/avatar-imaging/avatarimage?figure=h' + userInfo.figureString + '.png'] });
    const avatarImage = _message.attachments.first().url;
    return { userInfo, extraUserInfo, avatarImage };
};

getUser(args[0]).then((result) => {
    message.channel.send(`${result.userInfo.name}`);
}).catch(function(result) {
    console.log(result.userInfo.name);
});

在这里,我尝试使用3个API,但是即使有一个API却不存在,它总是很重要,我尝试仅使用result.userInfo.name仅使用第一个API,捕获,我使用第一个API,然后尝试了一个仅具有第一个API但没有第二个API的名称,但是我仍然得到:TypeError: Cannot read property 'name' of undefined,因为它也可以查看第二个API,我还能做什么呢?在这种情况下?所以基本上我该如何仅捕获第一个API的错误

编辑:我也尝试过:

    if (extraUserInfo.user.name) {return { userInfo, extraUserInfo, avatarImage };}
    else {return { userInfo, avatarImage };}

1 个答案:

答案 0 :(得分:0)

使用try catch解决了

try {
    const r = await snekfetch.get('https://www.website.com/api/public/users/' + userInfo.uniqueId + '/profile');
    const extraUserInfo = JSON.parse(r.text);
    return {
        userInfo,
        extraUserInfo,
        avatarImage
    };
} catch (error) {
    const extraUserInfo = {
        'error': 'not-found'
    };
    return {
        userInfo,
        extraUserInfo,
        avatarImage
    };
}
};
getUser(args[0]).then((result) => {
    console.log(result.extraUserInfo.error === 'not-found' ? result.userInfo.name : result.extraUserInfo.user.name);
}).catch((error) => {
    console.log(error);
});