使用promises

时间:2018-03-05 10:00:49

标签: reactjs promise

我正在尝试从返回promise的服务中呈现一些内容,但我无法弄清楚应该如何在“return”块中返回数据。

返回一些静态数据没问题,如本例所示。但是如何以相同的方式从注释代码中返回数据?

图像显示控制台,您可以在其中看到承诺。

我知道答案很简单,但我无法绕过它。

render() {

		const data2 = [
			{title:'item one', id:'000'},
			{title:'item two', id:'001'}
		];
		console.log(data2);

		const data = firebaseCon.content.get('text', { fields: ['id', 'title'] });
		console.log(data);

		var itemList = data2.map(function(item) {
			return <li className="item" key={item.id}>{item.title}</li>;
		});

		return (
			<ul>
				{itemList}
			</ul>
		)
	}

enter image description here

3 个答案:

答案 0 :(得分:5)

首先,我会说你做错了。

您永远不应该在渲染功能中发出服务器请求。

您应该在componentWillMount()componentDidMount()

中提出服务器请求

如果您了解async/await概念,那么它会对您有所帮助。

您可以查看此链接..

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

你可以试试这个......

import React, { Component } from 'react';
export default class ListData extends Component {
  constructor(props) {
    super(props);
    this.state = {
      data: []
    };
  }
  async componentDidMount() {
    const data = await firebaseCon.content.get('text', { fields: ['id', 'title'] });
    this.setState({ data });
  }

  render() {
    const { data } = this.state;
    const itemList = data.map(function(item) {
            return <li className="item" key={item.id}>{item.title}</li>;
        });
    return (
      <div>
        {data.length > 0 &&
           <ul>
             { itemList }
           </ul>
        }
      </div>
    );
  }

}

希望它会有所帮助

答案 1 :(得分:0)

你见过这个吗?

https://github.com/axios/axios

  

基于Promise的HTTP客户端,用于浏览器和node.js.

您可以在本教程中看到它与React一起使用:

https://codeburst.io/building-appointment-scheduler-app-in-react-and-nodejs-f163c4eaab6b

希望它有所帮助。

答案 2 :(得分:0)

此代码将处理api返回的对象,并将提取移至componentDidMount

constructor(props) {
   super(props);
   this.state = {
      data: [],
   }
}
componentDidMount() {
    firebaseCon.content.get('text', { fields: ['id', 'title'] })
      .then((response) => {
          let data = [];
          for (item in response) {
              data.push(response[item]);
          }
          this.setState({ data });
      });
}

render() {
    let itemList = this.state.data.map(function(item) {
        return <li className="item" key={item.id}>{item.title}</li>;
    });
    return (
        <ul>
            {itemList}
        </ul>
    )
}

仔细研究Promises的方法thencatch应该更清楚:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then