ReactJS & Flux 从 promise 获取数据
ReactJS & Flux get data from promise
我正在尝试使用我在模板 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 直接在组件中调用而不是在服务中调用。但我知道这是不好的做法,我怎样才能做到这一点?
您好,基本上您将 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});
});
}
我正在尝试使用我在模板 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 直接在组件中调用而不是在服务中调用。但我知道这是不好的做法,我怎样才能做到这一点?
您好,基本上您将 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});
});
}