我在一个函数中有一条提取指令,该指令从服务器获取API密钥,其他一些对象使用该指令将API密钥传递给任何需要它的服务。
export default async function getAPIKey(key) {
return await (await fetch('http://localhost:8000/' + key)).json();
}
在我的天气对象中:
export default {
URI: 'https://api.openweathermap.org',
getLocalWeather: async function(city=null, countryCode=null) {
try {
// fetch the API key from environment
const API_KEY = await getAPIKey('wx');
//... rest of code
目前的代码有效,但是我不明白为什么我需要3个await语句。我会不需要两个吗?我需要一个用于fetch()
中的getAPIKey()
。然后.json()
返回一个promise,因为它必须等待响应主体,因此我需要等待getLocalWeather()
中调用该函数的地方。但是,如果我在getAPIKey()
中没有两个等待,它将返回[object Response]
吗?
本质上,我想知道为什么以下错误:
export default async function getAPIKey(key) {
return (await fetch('http://localhost:8000/' + key)).json();
}
在我的天气对象中:
export default {
URI: 'https://api.openweathermap.org',
getLocalWeather: async function(city=null, countryCode=null) {
try {
// fetch the API key from environment
const API_KEY = await getAPIKey('wx');
//... rest of code
我想念吗?因为我只看到两个承诺。我知道async / await函数是幕后的承诺,所以getAPIKey()
是一个承诺,但是那个承诺不是.json()
的承诺吗?如果是这样,为什么在我调用该函数的地方等待还不够?
我不确定我无法理解的内容。
答案 0 :(得分:0)
您在await
内不需要任何getAPIKey()
语句,甚至不需要async
就可以了。您可以这样做:
export default function getAPIKey(key) {
return fetch('http://localhost:8000/' + key).json();
}
您只想退还fetch().json()
的承诺。
目前的代码有效,但是我不明白为什么我需要3个await语句。我会不需要两个吗?
实际上,您在进行await getAPIKey()
时只需要一个。完全不需要getAPIKey()
中的其他内容。
当您执行以下操作时:
export default async function getAPIKey(key) {
return await fetch('http://localhost:8000/' + key).json();
}
您只是添加了一个没有用的多余的await
。该函数返回一个诺言(所有async
函数都返回一个诺言),并且在完成await
时将解决该诺言,这与刚开始时return fetch('http://localhost:8000/' + key).json();
完全一样。添加第二个await
也不会增加任何值。