【发布时间】:2020-04-22 06:23:06
【问题描述】:
我正在尝试使用异步等待并使用 fetch api 获取数据
我的问题是,我只是不太明白我是如何真正从服务器获得答案的,而不是承诺的状态。我在控制台中得到以下信息
Promise {<pending>}
-------------------------------
{locale: "en"}
但我更期待的是服务器响应应该是“locale: en”。
我的代码:
const locale = getLocale();
console.log(locale) // here I want to have "locale: en" as a output
async function fetchLocale() {
return await fetch('/get-language', {
headers: {
'Accept': 'application/json'
},
method: 'GET',
}).then(response => {
if (response.ok) {
return response.json()
}
return Promise.reject(Error('error'))
}).catch(error => {
return Promise.reject(Error(error.message))
})
}
async function getLocale() {
return await fetchLocale();
}
我要归档的目标是返回此“locale: en”响应并将其存储在我的代码示例开头的“locale”常量中。
韩国
【问题讨论】:
-
哦——我用的是纯 JS
-
你的
getLocale()函数没有返回任何东西。 -
将
console.log(response)替换为return response,将fetchLocale()替换为getLocale() -
... 然后明白你得到的是一个承诺,所以你仍然不会直接获得语言环境。您需要添加一个
.then()回调,或者将调用包装在另一个立即调用的async函数包装器中。 -
@JuniorDev 请查看我或 TKoL 的答案。您不能将异步结果带入文件顶层等同步上下文中,这是不可能的。您需要在异步函数中使用
.then()或await来使用该函数。