Javascript async/await return 值未定义,为什么?
Javascript async/await return value is undefined, why?
我有一个通过 API 发布数据的函数。我想要 return 响应...我正在按照在线教程尝试理解 async/await,我现在的布局方式对我来说似乎是正确的。
我可以在 postAsset.then 语句中打印,但 return 值始终未定义。这就是我认为 await 已解决的问题,不确定为什么在这种情况下它仍然未定义?
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)
}
因为您使用的是 .then
而不是 await
- 如果您 return 得到了承诺,但您没有得到,这会起作用。
解决方案一:
Return 你从 axios.post
得到的承诺(在它前面加上 return
):
return axios
.post(...)
.then(...)
方案二(较好):
不要将 .then
与 async
/await
混合使用,而是 仅 使用 async
/await
:
try {
const response = await axios.post(urlAssets, assetToPost, config)
return response.assetId
} catch (error) {
console.log('POSTING ASSET ERROR:', error)
return -1
}
(顺便说一下,我把 error.message
改成了 error
这样你就不会丢失重要的堆栈信息!)
函数 postAsset 应该 return 一个承诺,并且在承诺中应该执行调用 axios.post
您正在从 axios
调用返回 assetId
,但未从 postAsset
方法返回任何内容。
只需在 axios
调用之前添加 return
关键字。它会起作用。
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
})
我有一个通过 API 发布数据的函数。我想要 return 响应...我正在按照在线教程尝试理解 async/await,我现在的布局方式对我来说似乎是正确的。
我可以在 postAsset.then 语句中打印,但 return 值始终未定义。这就是我认为 await 已解决的问题,不确定为什么在这种情况下它仍然未定义?
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)
}
因为您使用的是 .then
而不是 await
- 如果您 return 得到了承诺,但您没有得到,这会起作用。
解决方案一:
Return 你从 axios.post
得到的承诺(在它前面加上 return
):
return axios
.post(...)
.then(...)
方案二(较好):
不要将 .then
与 async
/await
混合使用,而是 仅 使用 async
/await
:
try {
const response = await axios.post(urlAssets, assetToPost, config)
return response.assetId
} catch (error) {
console.log('POSTING ASSET ERROR:', error)
return -1
}
(顺便说一下,我把 error.message
改成了 error
这样你就不会丢失重要的堆栈信息!)
函数 postAsset 应该 return 一个承诺,并且在承诺中应该执行调用 axios.post
您正在从 axios
调用返回 assetId
,但未从 postAsset
方法返回任何内容。
只需在 axios
调用之前添加 return
关键字。它会起作用。
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
})