首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ReactJS & Flux从承诺中获取数据

ReactJS & Flux从承诺中获取数据
EN

Stack Overflow用户
提问于 2016-10-27 15:17:07
回答 1查看 294关注 0票数 0

我试图从服务器获取数据,并使用我在一个模板reactjs项目中找到的服务函数。我确实从服务器收到了一个非常好的解析器,我可以在服务中看到数组是正常的,但是当将数组交给调用它的组件时就不会了。在组件中,我得到了一个具有这些值(我在控制台中见过)但无法访问它们的诺言对象。我遗漏了什么?

我的组件具有以下功能:

代码语言:javascript
复制
calculate(dict) {
    var results = Service.calc(dict)
      .catch((err) => {
          var errResp = JSON.parse(err.response);
          console.log(errResp);
          this.setState({responseErrors: errResp});
    });
    this.setState({results:results._handler});
}

当我将结果打印到控制台时,我看到了诺言对象,在_handler.handler内部是一个带有值的值数组,但我无法使用它们。当访问results._handler.handler: undefined时出现了错误。

被叫的服务如下所示:

代码语言:javascript
复制
class Service {
    calc(dict) {
    return this.handleCalculate(when(request({
        url: UserConstants.URL,
        method: 'POST',
        type: 'json',
        data: dict
    })));
}

handleCalculate(calcPromise) {
    return calcPromise.then(
        function(data) {
            console.log(data); //Success
            return data;
        }
    )
}

同时,我直接在组件中使用ajax调用,而不是服务。但我知道这是错误的做法,我怎么才能做到这一点呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-27 15:36:52

嗨,基本上你把setState放错地方了。(它立即设置状态,而不等待结果得到解决)。它应该是这样的

代码语言:javascript
复制
calculate(dict) {
    var results = Service.calc(dict)
      .then(results => {
         this.setState({results: results});
      })
      .catch((err) => {
          var errResp = JSON.parse(err.response);
          console.log(errResp);
          this.setState({responseErrors: errResp});
    });
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40288376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档