Попытка отловить UnhandledPromiseRejectionWarning: Ошибка: 404 не найдена - PullRequest
0 голосов
/ 30 августа 2018

Использование: 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 голосов
/ 30 августа 2018

Проблема в том, что вы отключаете new Promise антипаттерн , и при этом неправильно распространяете ошибки. : -)

Правильный способ исправить это не использовать 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 не сделает этого за вас.)

Если у вас была веская причина, чтобы обернуть вокруг нее еще одно обещание (здесь, похоже, его нет), вам необходимо убедиться, что вы распространили ошибку из snekfetch. обещаю своим: .catch(reject):

// 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);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...