我是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;
}
答案 0 :(得分:1)
您不必等待result
的值,因此您只会得到未兑现的承诺。如果您更改
const result = this.getFieldsAPI();
到
const result = await this.getFieldsAPI();
您会得到想要的。您还需要使getFields()
异步。
答案 1 :(得分:1)
要获得有效的响应,您应该稍微调整一下代码,因为当前您返回的是字符串“结果”,而不是诺言中的数组。
在您的getFieldsApi
方法中,您可以执行以下操作:
...
Response = await Axios.get(API_URL + currentChromosome + this.state.currentKit);
return Response.data.map((locus) => locus);
您会这样称呼它:
const result = await this.getFieldsApi();
答案 2 :(得分:0)
异步函数将始终返回Promise
。承诺可能会解决或被拒绝。您可以通过以下方式处理承诺:
then
:this.getFieldsAPI.then((value) => {
// code on success
}, (errorReason) => {
// code on error
});
await
:try {
const result = await this.getFieldsAPI();
} catch(errorReason) {
// code on error
}
您可以选择最适合自己的。我个人更喜欢选项2,它似乎不太混乱。