我知道有很多类似的问题,但所有答案都说使用异步函数和内部的 await 函数调用......我已经在做。经过几个小时的努力,我需要问这个问题......如果你觉得你有必要,请随意投反对票,但我已经在寻找答案。
所以我有点困惑,可以多加留意一下。我正在使用 Axios 从 API 调用返回数据。我有一个异步函数发送请求并等待 axios.get 函数请求。所以在我看来,它应该返回数据而不是承诺。然而,它返回了一个承诺,我尝试过的任何东西都不会返回数据。我可以控制台记录这个并吐出数据,但实际返回的是一个承诺对象。如果有人能告诉我这里出了什么问题,我将不胜感激。
import axios from "axios";
import { LatLngTuple } from "leaflet";
const primaryKey = '#################################################';
const getGeoData = (apiUrl: string) => (
axios.get(apiUrl, {
timeout: 5000,
headers: {
"Content-Type": "application/json",
},
})
);
async function geoLocate(longAddress, country){
let geocodeUrlTemplate = 'https://atlas.microsoft.com/search/address/json?api-version=1.0&subscription-key={Azure-Maps-Primary-Subscription-key}&query={longAddress}countrySet={country}&view=Auto';
let geoRequestUrl = geocodeUrlTemplate.replace('{Azure-Maps-Primary-Subscription-key}', primaryKey)
.replace('{longAddress}', encodeURIComponent(longAddress))
.replace('{country}', country);
try {
const {data} = await getGeoData(geoRequestUrl);
const geoData = data.results[0].position;
return [geoData.lat, geoData.lon];
} catch (err) {
console.error(err);
}
};
export default geoLocate;
答案 0 :(得分:1)
仔细想想,geoLocate
不会返回一个承诺以外的任何东西。 geoLocate
本身必须等待来自您的 API 调用的数据,因此在获得该数据之前,它无法将这些数据返回给调用方。因此,如果您想使用来自 API 调用的数据,它必须返回一个承诺。
您应该知道,每当您在函数声明前使用 async
时,该函数都会自动返回一个 promise,因此任何调用它的东西都需要 await
您的函数来访问已解决(或使用 .then(data => ...
语法)。