我正在尝试在renderSelect中获取PromiseValue
。 (在tmp
)
问题是我得到了一个承诺,这是正常行为。但是我不明白如何才能获得Promise中的值,以便我可以使用它们。
我有一个ApiService
课程如下
handleResponse(response) {
if (response.status >= 200 && response.status < 300) {
return response.json();
}
return response.json()
.then((res) => {
throw new Error(res.message);
},
() => {
throw new Error();
});
}
get(url) {
return fetch(`${this.API_URL}${url}`, {
method: 'GET',
headers: this.headers,
})
.then(response => this.handleResponse(response));
}
我的.jsx
喜欢这个
const getOptions = (contractor_employee_id) => {
const apiService = new ApiService()
return apiService
.get(`some_url`)
.then(
response => {
return ["toto", "tata", "titi"]
},
err => (console.log("Failed"))
);
};
const renderSelect = (field) => {
const tmp = getOptions(field.id)
console.log(tmp)
答案 0 :(得分:2)
Promise是异步的。如果要以同步方式返回promise结果,请使用async / await。
const renderSelect = async (field) => {
const tmp = await getOptions(field.id)
console.log(tmp)
}
答案 1 :(得分:0)
您可以使用Javascript Promise
将承诺退回renderSelect
const getOptions = (contractor_employee_id) => {
const apiService = new ApiService()
return new Promise((resolve, reject) => {
apiService
.get(`some_url`)
.then(
response => {
resolve(["toto", "tata", "titi"]);
},
err => (console.log("Failed") reject('failed');)
);
};
})
}
const renderSelect = (field) => {
getOptions(field.id).then((res) => {
console.log(tmp);
})
}