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);
});