【发布时间】:2021-11-09 17:53:54
【问题描述】:
我将我的 API 调用放在一个新函数中,这样我就可以轻松地用几行代码调用它们,而不是在每个页面上都使用大量代码。我遇到的问题是异步和等待在返回数据之前完成。
我首先得到 console.log(sess.getIdToken().getJwtToken()) 控制台,然后是 undefined for console.log(getMessages),然后是来自 console.log(response) 的数据。
所以 await Auth.currentSession().then(...) 运行但不等待它内部的 axios 调用。如何返回数据以便在 useEffect 中访问?
useEffect(() => {
async function getMessages() {
const getMessages = await ApiService.getMessages();
console.log(getMessages)
}
getMessages();
}, []);
async getMessages() {
return await this.__sendRequest("/default/message", "GET");
}
async __sendRequest(url, method) {
await Auth.currentSession().then(sess => {
console.log(sess.getIdToken().getJwtToken())
axios({
method: method,
url: process.env.REACT_APP_USER_URL + url,
headers: {
"X-TOKEN-ID": sess.getIdToken().getJwtToken(),
"addresseeType": "P",
"content-type": "application/json"
}
}).then(function (response) {
console.log(response)
return response
}).catch(err => {
console.error(err);
})
})
}
【问题讨论】:
-
__sendRequest没有返回任何内容。应该是return Auth.currentSession()...,这个函数不需要async/await。 -
删除所有的
.then(),直接填满await。
标签: javascript reactjs promise axios