代码之家  ›  专栏  ›  技术社区  ›  MJM

在承诺中返回价值

  •  0
  • MJM  · 技术社区  · 6 年前

    我正试图返回一个字符串值以在HTML中显示它。在我的HTML中,我在视图中使用了一个文本元素(类似于react native中的DIV),并尝试用我从方法中得到的元素来填充它。 _getCategories . 问题是我不能让这个方法返回一个字符串值,因为这个值是在一个promise中返回的。

    现在,我尝试使此方法返回一个简单的字符串值:

        _getCategories = item => {
        const categoryNames = [];
        let fetches = [];
        var allCategories = '';
        for (var i = 0; i < item.categories.length; i++) {
          allCategories = allCategories + item.categories[i] + ',';
        }
        allCategories = allCategories.substring(0, allCategories.length - 1);
        fetches.push(
          fetch(
            'http://54.168.73.151/wp-json/wp/v2/categories?include=' + allCategories
          ).then(response =>
            response.json().then(responseJson => {
              var names = '';
              for (let category of responseJson) {
                names = names + category.name + ', ';
              }
              this.names = String(names.substring(0, names.length - 2));
              console.log(this.names);
              return <Text style={styles.categories}>{this.names}</Text>;
            })
          )
        );
      };
    

    我认为这已经返回了正确的值,但在我的视图中没有显示。我调用上面的方法如下:

    <View>
          {this._getCategories(item)} //this will be a text element after return
    </View>
    

    编辑:

    我简化了我的代码,只对所有类别提出一个请求,所以现在它可能会返回一个文本对象。不幸的是,我的应用程序中仍然没有显示文本。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Jonas Wilms    6 年前

    首先,从以下方法返回承诺链:

     return Promise.all(fetches).then(res => {
    

    但它仍然会返回一个承诺,解决某个时间的文本,并且没有办法改变这一点。相反,该文本应该是组件状态的一部分,以便Xou可以在Promise解决时更新文本:

      onComponentDidMount() {
        this._getCategories().then(categories => this.setState({ categories }));
     }
    

    在里面 render() 只要做:

     <div>
      {this.state.categories || <Text>Loading categories</Text>}
     </div>