2016-10-27 47 views
0

我想从模板reactjs项目中找到的具有服务功能的服务器获取数据。我从服务器接收到一个完美的安装程序,我可以看到数组在服务中仍然可以使用,但是在移交给首先调用该组件的组件时不会。在组件中,我得到一个promise对象,它具有值(我已经在控制台中看到它们),但我无法访问它们。我错过了什么?ReactJS&Flux从承诺中获取数据

我的组件已经下列功能:

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时出现错误:未定义。

被调用的服务是这样的:

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

回答

2

嗨基本上你把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}); 
    }); 
} 
+0

确实!很简单。感谢您将此错误引起我的注意。 – Stefan