Я учусь использовать async / await, и у меня возникают проблемы при попытке сделать запрос api для настройки моего устройства Twilio. Учитывая приведенный ниже блок кода, когда я вызываю device(), я получаю следующее сообщение об ошибке:
Uncaught
TwilioException {message: "Capability token is not valid or missing."}
message
:
"Capability token is not valid or missing."
__proto__
:
Object
Я считаю, что это связано с тем, что json, возвращенный функцией device, все еще отображается как ожидающий. Как мне решить эту проблему и что я делаю не так? Спасибо.
Блок кода:
import {Device} from 'twilio-client';
const api = async () => {
try {
const response = await fetch('/api/twilio');
const json = await response.json();
if (response.status === 403) {
twilioConnectionFailure('Twilio has not been purchased.');
}
return json;
} catch (error) {
console.info(`Connection failed: ${error.message}`);
throw Error(error.message);
}
};
const device = () => {
const json = api();
Device.setup(json.token);
return Device;
};
export default device;



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Функция api по-прежнему асинхронна и возвращает обещание - его нужно дождаться:
export default async function device() {
const json = await api();
// ^^^^^
Device.setup(json.token);
return Device;
}
Все асинхронные функции возвращают обещание. Вы должны использовать
.then()илиawaitв этом обещании, чтобы получить от него пользу.async/awaitне превращает асинхронную функцию в синхронную волшебным образом. Он по-прежнему асинхронен и возвращает обещание. И ваша функция возвращает обещание ДО того, как значение async станет доступным.