尝试捕获UnhandledPromiseRejectionWarning:错误:找不到404

时间:2018-08-30 09:21:23

标签: javascript json promise

使用:https://www.npmjs.com/package/snekfetch 我正在尝试捕获以下错误:UnhandledPromiseRejectionWarning: Error: 404 Not Found

在网站上显示:{"error":"not-found"}

代码:

const promise = new Promise(function(resolve, reject) {
    snekfetch.get('https://www.website.com/api/public/users?name=' + user).then(body => {
        const json = JSON.parse(body.text);
        const name = json.name;
        console.log(json);
        json ? reject(Error('It broke')) : resolve(name);
    });
});

promise.then((result) => {
    console.log(result);
    console.log('works');
}).catch((error) => {
    console.log(error);
    console.log('does not work');
});

我试图检查是否存在json:json ? reject(Error('It broke')) : resolve(name);,并且解析方法有效,但是我似乎无法捕获404 Not Found错误,该怎么办?

1 个答案:

答案 0 :(得分:0)

问题是您在the new Promise antipattern上跳闸,并且在这样做时未正确传播错误。 :-)

解决此问题的正确方法是根本不使用new Promise

const promise = snekfetch.get('https://www.website.com/api/public/users?name=' + user)
    .then(body => {
        const json = JSON.parse(body.text);
        const name = json.name;
        return name;
    });

现在,promise将根据snekfetch的承诺来解决或拒绝;如果解析,它将使用JSON中的名称解析。 (我假设您确实需要解析JSON,而snekfetch不会为您这样做。)

如果,您有充分的理由将其他承诺包装起来(此处似乎没有一个承诺),则需要确保从{{1} }对您的承诺:snekfetch

.catch(reject)