Javascript 从componentDidMount调用函数(发出http请求)
我正在用Reactjs编写一个应用程序。我想在打开组件/页面时进行api调用 从componentDidMount()调用另一个函数,该函数使用axios发出http请求。从该函数中,我希望将一个对象返回到componentDidMount(),并在控制台中打印它 我已经尝试将http函数中的代码放到componentDidMount中,这是可行的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 = () =>
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));
}
}