Javascript 试图捕获未处理的PromisejectionWarning:错误:找不到404

Javascript 试图捕获未处理的PromisejectionWarning:错误:找不到404,javascript,json,promise,Javascript,Json,Promise,使用: 我试图捕获以下错误:未处理的PromisejectionWarning:错误:404未找到 网站上显示:{“错误”:“未找到”} 代码: 我试图检查是否存在json:json?拒绝(错误('It break')):解析(名称)和解决方法有效,但我似乎无法捕获404 not Found错误,我如何才能做到这一点?问题是您在执行此操作时被绊倒,并且错误传播不正确。:-) 解决此问题的正确方法是根本不要使用newpromise: const promise = snekfetch.get('h

使用: 我试图捕获以下错误:
未处理的PromisejectionWarning:错误:404未找到

网站上显示:
{“错误”:“未找到”}

代码:


我试图检查是否存在json:
json?拒绝(错误('It break')):解析(名称)和解决方法有效,但我似乎无法捕获404 not Found错误,我如何才能做到这一点?

问题是您在执行此操作时被绊倒,并且错误传播不正确。:-)

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

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
不会为您解析JSON。)

如果你有一个很好的理由来包装另一个承诺(这里似乎没有),你需要确保你将错误从
snekfetch
的承诺传播给你的:
.catch(reject)


“如果你有一个很好的理由把另一个承诺包装起来”——从来没有。这并不是说你在实现像
承诺这样的东西。所有的
@Bergi-我允许我无法立即想象的事情。:-)但最重要的是,我只是想解释为什么错误没有被传播。(但作为记录:总是有可能将一个thenable转换成一个实际的承诺,尽管你可以使用
承诺.解决
。毕竟,JS本身一直都在这样做,到处都在产生承诺…:-))
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;
    });
// NOT APPROPRIATE HERE, but how you'd do it if you used an explicit new promise
const promise = new Promise((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;
            resolve(name);
        })
        .catch(reject);
});