gpt4 book ai didi

javascript - 使用 Axios 时应该使用 Promise 吗?

转载 作者:行者123 更新时间:2023-12-04 02:58:10 25 4
gpt4 key购买 nike

Axios被描述为基于Promise,那么使用Axios查询数据时是否需要返回一个新的Promise?

app.get('/api/nearbyRecommendations', async (req, res) => {

if(!req.query) return res.send({ error: 'Please enable location to get recommendations.' })

try {
const { longitude, latitude } = req.query
const locationName = await location.getLocationName(longitude, latitude)
res.send(locationName)
} catch (error) {
res.send(error)
}
})

我正在向 MapBox API 发出 GET 请求,但尽管为 Axios 请求设置了 catch block ,但似乎没有收到任何错误,即使我在 .then() block 中抛出了新的错误。

const getLocationName = async (latitude, longitude) => {
return new Promise((resolve, reject) => {
axios.get(`https://api.mapbox.com/geocoding/v5/mapbox.places/${longitude},${latitude}.json?access_token=${darkSkyAPIKey}`, {json: true})
.then(response => {
if(!response.data) return reject({ error: 'No location found.' })

resolve(response.data)
}).catch(error => {
reject(error)
})
})
}

如果可能,请提供帮助并指出任何可以更改以遵循最佳实践的内容。

最佳答案

您可以立即返回 promise ,而无需使用异步函数:

const getLocationName = (latitude, longitude) => {
return axios.get(`https://api.mapbox.com/geocoding/v5/mapbox.places/${longitude},${latitude}.json?access_token=${darkSkyAPIKey}`, {json: true})
.then(response => {
if(!response.data)
throw Error('No location found.')
return response.data;
}).catch(error => {
console.log(error);
throw error;
})
}

Axios.get 已经向您返回了一个 promise 。如果您还将函数定义为异步,则意味着返回的 Promise 将再次包装在 Promise 中。因此,在您的示例中,您将响应三重包装在 promise 中。如果将其替换为带有常规函数的 getLocationName 函数,第一个代码片段中的用法将保持完全相同。

关于javascript - 使用 Axios 时应该使用 Promise 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57844415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com