Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从componentDidMount调用函数(发出http请求)_Javascript_Reactjs_Http_Web_Axios - Fatal编程技术网

Javascript 从componentDidMount调用函数(发出http请求)

Javascript 从componentDidMount调用函数(发出http请求),javascript,reactjs,http,web,axios,Javascript,Reactjs,Http,Web,Axios,我正在用Reactjs编写一个应用程序。我想在打开组件/页面时进行api调用 从componentDidMount()调用另一个函数,该函数使用axios发出http请求。从该函数中,我希望将一个对象返回到componentDidMount(),并在控制台中打印它 我已经尝试将http函数中的代码放到componentDidMount中,这是可行的 export class MyFunction extends Component { ... functionOne = () =>

我正在用Reactjs编写一个应用程序。我想在打开组件/页面时进行api调用

从componentDidMount()调用另一个函数,该函数使用axios发出http请求。从该函数中,我希望将一个对象返回到componentDidMount(),并在控制台中打印它

我已经尝试将http函数中的代码放到componentDidMount中,这是可行的

export class MyFunction extends Component {
  ...

  functionOne = () => {
    axios.get(API_FETCH_LINK)
      .then(response => response.data)
      .then((data) => {
        console.log("Data from db", data);              //PRINT ONE
        var date = new Date(Date.parse(data.timeStamp));
        console.log("Date from db", date);              //PRINT TWO
        return date;
        });
    };

  componentDidMount(){
  var date = this.functionOne();
  console.log("The date is ", date);                   //PRINT THREE
  }

 ...
}

打印1和打印2的输出有意义,但打印3显示“未定义”。有人知道为什么吗?

你没有从functionOne返回任何东西,所以当你从一个你没有返回任何东西的函数中说
var x=functionOne()
时,它是未定义的你在
functionOne()中没有
return
,而axios.get是异步的,为什么
var date=
是异步的呢?你把可变日期设置为承诺,然后不使用。他已经有了这样的承诺,为什么你要为我没有创造的东西责备他显然已经有了这样的承诺,因为他不明白承诺是如何运作的。这显然是个错误,没有理由隐瞒。
export class MyFunction extends Component {
    functionOne = () => {
        return axios.get(API_FETCH_LINK)
            .then(response => response.data)
            .then(data => {
                console.log("Data from db", data); //PRINT ONE
                var date = new Date(Date.parse(data.timeStamp));
                console.log("Date from db", date); //PRINT TWO
                return date;
            });
    };

    componentDidMount() {
        this.functionOne().then(date => console.log("The date is ", date));
    }
}