UnhandledPromiseRejectionWarning: отклонение необработанного обещания (идентификатор отказа: #) Ошибка: 200

При запуске моего запроса на получение через магазин iTunes Получите список лучших фильмов в iTunes из https://itunes.apple.com/us/rss/topmovies/limit=20/json

const fetch = require('node-fetch');

module.exports = function (app) {
    //Get homepage
    app.get('/', async (req, res) => {
        const url = 'https://itunes.apple.com/us/rss/topmovies/limit=20/json';
        const movie = req.params.id
        const movieResult = await fetch(url);
        const statusCodeIs200Or300 = movieResult.ok;
        const movieError = movieResult.statusText;
        const movieJson = await movieResult.json();
        const movieToRender = movieJson.feed.entry;
        console.info(movieResult.ok);
        if (movieResult.status == 200) {
          res.render('home', { movies: movieToRender});
        }
        throw new Error(movieResult.status);
    });

    // Get route for each specific the movies
    app.get('/movie/:id', async (req, res) => {
        const url = 'https://itunes.apple.com/us/rss/topmovies/limit=20/json';
        const movie = req.params.id
        const movieResult = await fetch(url)
        const statusCodeIs200Or300 = movieResult.ok
        const movieError = movieResult.statusText
        const movieJson = await movieResult.json()
        const movieToRender = movieJson.feed.entry[movie]
        // if statetement
        if (movieResult.status == 200) {
          res.render('modal', { movie: movieToRender})
        }
        throw new Error(movieResult.status);
    });


}

UnhandledPromiseRejectionWarning: отклонение необработанного обещания (идентификатор отказа: #) Ошибка: 200

пожалуйста, помогите мне с этой ошибкой

похоже, что есть проблема с одним из обещаний

NinjaG 27.05.2018 09:44
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
949
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

ошибка просто указывает, что вы не обрабатываете часть отклонения в обычном обещании есть часть .ловить(), как показано ниже

new Promise(function(resolve, reject) {
  resolve('Success');
  //reject('err)
})
.then(function(value) {
console.info("everything ok")
})
.catch(function(e) {
  console.info(e); // "oh, no!"
})

но что случилось в async await, когда возникла ошибка? вы можете сделать одно из следующих

try {
      await  await fetch(url)
    } catch (err) {
      //handle error 
    }

или же может быть такое промежуточное ПО

const express = require('express');

const app = express();

app.get('/', safeHandler(handler));

app.listen(3000);

function safeHandler(handler) {
  return function(req, res) {
    handler(req, res).catch(error => res.status(500).send(error.message));
  };
}

async function handler(req, res) {
  await new Promise((resolve, reject) => reject(new Error('Hang!')));
  res.send('Hello, World!');
}

более поздняя часть была занята этим источником безопасное решение для оператора

Ответ Фади объясняет, как правильно обрабатывать исключение в обещании, но в вашем случае вам также нужно вернуть что-то из ваших функций, иначе оно всегда будет выдавать ошибку:

app.get('/', async (req, res) => {
    const url = 'https://itunes.apple.com/us/rss/topmovies/limit=20/json';
    const movie = req.params.id
    const movieResult = await fetch(url);
    const statusCodeIs200Or300 = movieResult.ok;
    const movieError = movieResult.statusText;
    const movieJson = await movieResult.json();
    const movieToRender = movieJson.feed.entry;
    console.info(movieResult.ok);
    if (movieResult.status == 200) {
      // here you should return something to handle the case were all is good else the execution is going to continue and move onto to throw an exception. 
      return res.render('home', { movies: movieToRender});
     // this should do the trick and in case your rendering function return an error it would be propagated as well.
    }
    throw new Error(movieResult.status);
});

в сочетании с правильной обработкой ошибок это даст что-то вроде:

app.get('/', async (req, res) => {
    const url = 'https://itunes.apple.com/us/rss/topmovies/limit=20/json';
    const movie = req.params.id
    try {
        const movieResult = await fetch(url);
        const statusCodeIs200Or300 = movieResult.ok;
        const movieError = movieResult.statusText;
        const movieJson = await movieResult.json();
        const movieToRender = movieJson.feed.entry;
        console.info(movieResult.ok);
        if (movieResult.status == 200) {
            return res.render('home', { movies: movieToRender});
        }
        throw new Error(movieResult.status);
    } catch (err) {
        // handle the error correctly here: e.g. use an error template
        res.status(500).send(error.message);
    }
});

Он должен следовать той же схеме, что и я отредактировал :)

Leo 27.05.2018 19:32

Однако вам следует изменить URL-адрес, на который он нацелен, я не знаю API itunes, но вы используете URL-адрес, который возвращает 20 лучших фильмов, а не фильм с определенным идентификатором.

Leo 27.05.2018 19:34

Другие вопросы по теме