Почему ответ .then от ax ios не может изменить значение переменной - PullRequest
0 голосов
/ 19 июня 2020
const axios = require('axios');
const url = '';
const urlMovies = 'http://localhost:3001/'
const axiosServer = axios.create({
  baseURL: url,
});

class EntertainMeController {
  static readEntertainMe(req, res) {    
    let movies;
    let tvseries;

    axiosServer({
      url: urlMovies,
      method: 'get',
    })
    .then(({ data }) => {
      movies = data;
    }

   res.status(200).json({
    movies
   })
 }

}

Я пишу этот код внутри контроллеров, фильмы router.get ('/', EnternainMeController.readEntertainMe) не определены, любая помощь, пожалуйста,

Ответы [ 3 ]

0 голосов
/ 19 июня 2020

Попробуйте добавить res.status внутри блока then. Затем блок будет выполняться асинхронно из основного потока кода.

Также, если это поможет, вы можете удалить переменную movies.

axiosServer({
  url: urlMovies,
  method: 'get',
})
.then(({ data }) => {
  movies = data;
  res.status(200).json({
    movies
  })
}
0 голосов
/ 19 июня 2020

Один лайнер-ответ: используйте var movies вместо let movies .

Объяснение: это проблема лексической области видимости, которую можно решить с помощью замыканий. Вам нужен доступ к внешней области функций. Замыкание - это комбинация функций, связанных вместе (заключенных), со ссылками на ее окружающее состояние (лексическое окружение). Другими словами, замыкание дает вам доступ к области внешней функции из внутренней функции. В JavaScript замыкания создаются каждый раз при создании функции, во время создания функции. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures

0 голосов
/ 19 июня 2020

Попробуйте так:

  static async readEntertainMe(req, res) {    
    let movies;
    let tvseries;

   let { data } = await axiosServer({
      url: urlMovies,
      method: 'get',
   })
   movies = data;
   res.status(200).json({
     movies
   })
...