简体   繁体   English

渲染来自多个ajax请求的数据

[英]Render data from multiple ajax request

I need to make a call and set an object before sending it to the child.我需要先打电话并设置一个对象,然后再将其发送给孩子。 However, when I send, as 3 properties that I created (photo, albums, posts) are undefined in the son.但是,当我发送时,我创建的 3 个属性(照片、相册、帖子)在儿子中未定义。 What am I doing wrong?我究竟做错了什么?

buildUser: () => {
  return new Promise( (resolve, reject) =>{
      let response = [];

      fetch(`${endPoint}users`)
          .then(res => res.json())
          .then( users => {

              users.forEach(user => {
                  user.city = user.address.city;

                  Promise.all([
                      ApiService.getUserPhoto(user.id),
                      ApiService.getUserPost(user.id),
                      ApiService.getUserAlbum(user.id)
                  ]).then( data => {
                      user['photos'] = data[0].length.toString();
                      user['posts'] = data[1].length.toString();
                      user['albums'] = data[2].length.toString();
                  });

                  response.push(user);
                })

                resolve(response);   
          })
          .catch(err => {
            console.log(err);
            reject(err);
        })
  })

}

async componentDidMount() {异步 componentDidMount() {

const users = await ApiService.buildUser()
this.setState({ users })

} }

render() { return (渲染(){ 返回(

  <Fragment>
    <Header />
    <Breadcrumb />
    { this.state && this.state.users &&
    <User data={ this.state.users }/> }
    <Register />
  </Fragment>
);

} }

buildLine () {构建线(){

    this.props.data.forEach(data => {
        console.log('data.posts', data.posts) // is undefined
        let line = {};
            this.props.columns.map(columns => {
                return line[columns.toLowerCase()] = data[columns.toLowerCase()];
            });

        this.lines.push(line);
    });
}

... ...

I changed some of the code, looks like you're not handling the promises correctly:我更改了一些代码,看起来您没有正确处理承诺:

 const users = () => Promise.resolve([{ id: 1 }, { id: 2 }]); const ApiService = { getUserPhoto(id) { return [1]; }, getUserPost(id) { return [1, 2]; }, getUserAlbum(id) { return [1, 2, 3]; }, }; class App extends React.Component { state = { users: [] }; buildUser = () => { return users() .then(users => Promise.all( users.map(user => Promise.all([ user, ApiService.getUserPhoto(user.id), ApiService.getUserPost(user.id), ApiService.getUserAlbum(user.id), ]).then(([user, photos, posts, albums]) => { // user.city = user.address.city; user['photos'] = photos.length.toString(); user['posts'] = posts.length.toString(); user['albums'] = albums.length.toString(); return user; }) ) ) ) .catch(err => { console.log(err); }); }; componentDidMount() { this.buildUser().then(users => this.setState({ users }) ); } render() { return ( <pre> {JSON.stringify(this.state.users, undefined, 2)} </pre> ); } } ReactDOM.render(<App />, document.getElementById('root'));
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script> <div id="root"></div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM