使用: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错误,该怎么办?
答案 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)