У меня есть инструкция выборки в одной функции, которая извлекает ключ 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 оператора ожидания. Разве мне не нужно только два? Мне нужен один для fetch()
в getAPIKey()
. Затем .json()
возвращает обещание, потому что оно должно ждать тела ответа, поэтому мне нужно ждать, когда я вызову функцию в 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()
Обещанием? И если так, то почему не достаточно ожидания, когда я вызываю функцию?
Я не уверен, что я не понимаю.