为什么来自axios的.then响应无法更改变量的值

时间:2020-06-19 07:23:48

标签: express axios

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 :(得分:0)

尝试这样:

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

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

答案 1 :(得分:0)

尝试在then块内添加res.status。然后,块将从主代码流异步执行。

如果有帮助,您可以删除movie变量。

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

答案 2 :(得分:0)

一个衬套答案:使用 var电影而不是 let电影

解释:这是一个词法作用域的问题,可以使用闭包来处理。您需要访问外部函数范围。闭包是捆绑在一起(封闭)的功能及其周围状态(词汇环境)的组合。换句话说,闭包使您可以从内部函数访问外部函数的作用域。在JavaScript中,每次创建函数时都会在函数创建时创建闭包。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures