【问题标题】:ReactJS & Flux get data from promiseReactJS & Flux 从 Promise 中获取数据
【发布时间】:2016-10-27 15:17:07
【问题描述】:

我正在尝试使用在模板 reactjs 项目中找到的服务功能从服务器获取数据。我确实从服务器收到了一个非常好的 anwser,我可以看到阵列仍在服务中时没问题,但在移交给首先调用它的组件时却没有。在组件中,我得到一个 Promise 对象,它具有值(我在控制台中看到它们)但我无法访问它们。我错过了什么?

我的组件有以下功能:

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});
}

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

被调用的服务如下所示:

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 调用。但我知道这是不好的做法,我怎样才能做到这一点?

【问题讨论】:

    标签: reactjs flux


    【解决方案1】:

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

    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});
        });
    }
    

    【讨论】:

    • 确实!很简单。感谢您提醒我注意这个错误。
    猜你喜欢
    • 2021-12-28
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 2021-05-18
    相关资源
    最近更新 更多