I have a function that posts data via an API. I want to return the response...I am following tutorials online to try to understand async/await, and the way I have it laid out now seems to be correct to me.
I can print inside the postAsset.then statement, but the return value is always undefined. That's what I thought await fixed, unsure why it is still undefined in this case?
const postAsset = async (assetToPost) => {
let token = await retrieveToken()
if (token !== undefined && token !== 'Error') {
const config = {
headers: { Authorization: `Bearer ${token}` }
};
let urlAssets = `${API_ROUTE}${ASSETS.ASSETS_API_URL}`
axios
.post(urlAssets, assetToPost, config)
.then(function (response) {
let assetId = response.data
return assetId
})
.catch(function (error) {
console.log('POSTING ASSET ERROR: ', error.message);
return -1
})
}
}
const postData = async () => {
// post asset, get id response.
// then post beacons in loop, get id response for each
// then post a beaconId as part of assetId
let assetId = await postAsset(asset)
console.log(assetId)
}
CodePudding user response:
Because you are using .then
and not await
- which would work if you'd return the promise that you get, but you don't.
Solution 1:
Return the promise you get from axios.post
(add return
in front of it):
return axios
.post(...)
.then(...)
Solution 2 (better):
Don't mix .then
with async
/await
, instead only use async
/await
:
try {
const response = await axios.post(urlAssets, assetToPost, config)
return response.assetId
} catch (error) {
console.log('POSTING ASSET ERROR:', error)
return -1
}
(By the way, I changed error.message
to just error
so you won't lose the important stack information!)
CodePudding user response:
the function postAsset should return a promise, and within the promise should execute the call axios.post
CodePudding user response:
You're returning your assetId
from the axios
call but not returning anything from the postAsset
method.
Just add the return
keyword before you axios
call. It will work.
return axios
.post(urlAssets, assetToPost, config)
.then(function (response) {
let assetId = response.data
return assetId
})
.catch(function (error) {
console.log('POSTING ASSET ERROR: ', error.message);
return -1
})