【发布时间】:2019-02-26 17:47:05
【问题描述】:
我对 ReactJS 很陌生。
异步函数的返回值有问题
当我打电话时
const result = this.getFieldsAPI();
结果值为 [object Promise]
我从 console.log("result : " + result);
中看到 [object Promise]getFieldsAPI = async() => {
let currentChromosome = "";
switch (this.state.chromosome) {
case "Autosom":
currentChromosome = "/getlocusautosomalkit/";
break;
case "Y_STRs":
currentChromosome = "/getlocusykit/";
break;
case "X_STRs":
currentChromosome = "/getlocusxkit/";
break;
default:
currentChromosome = "";
}
let result = [];
await Axios.get(API_URL + currentChromosome + this.state.currentKit).then((Response) => {
Response.data.map((locus) => {
result.push(locus);
});
})
return "result";
}
// To generate mock Form.Item
getFields() {
const count = this.state.expand ? 10 : 6;
const { getFieldDecorator } = this.props.form;
const children = [];
const result = this.getFieldsAPI();
console.log("result : " + result);
for (let i = 0; i < 10; i++) {
children.push(
<Col span={8} key={i} style={{ display: i < count ? 'block' : 'none' }}>
<Form.Item label={`Field ${i}`}>
{getFieldDecorator(`field-${i}`, {
rules: [{
required: true,
message: 'Input something!',
}],
})(
<Input placeholder="placeholder" />
)}
</Form.Item>
</Col>
);
}
return children;
}
【问题讨论】:
-
如果你想得到真正的返回值,使用
const result = await this.getFieldsAPI(); -
那么,你是说异步函数正在返回一个承诺?我认为这没有问题。他们就是这样做的。
-
但是如果我在 getField() 前面添加了 async 就会抛出错误。
-
我认为您的远程呼叫只是在一个不应该出现的地方。这不是您通常希望在每次渲染发生时都运行的东西。
标签: javascript reactjs