Асинхронные функции являются асинхронными.
Нельзя заставить асинхронную функцию работать синхронно.
Вы можете создать иллюзию синхронного запуска асинхронной функции, используя ключевое слово await
внутри функции, помеченной ключевым словом async
.
Вы можете только await
значение, которое является Обещанием. (Я понятия не имею, возвращает ли AsyncStorage.getItem('language')
Обещание или нет).
Чтобы это работало, функция async
будет всегда возвращать Обещание .
Итак:
let default_language = async () => {
return await AsyncStorage.getItem('language');
}
Создает функцию, которая назначена на default_language
.
Эта функция вернет обещание. Это обещание будет соответствовать стоимости, которую вы возвращаете. Так как это должно быть Обещанием, это значение будет Обещанием. Если вы выполняете обещание с другим обещанием, оно принимает новое обещание.
Это означает, что ваш код функционально такой же, как:
let default_language = () => AsyncStorage.getItem('language');
Обертывание дополнительной функции вокруг нее более или менее бессмысленно. Это просто делает немного более короткое имя, чтобы позвонить позже.
Полезно использовать async
/ await
, если вы собираетесь что-то делать со значением внутри функцией async
:
let default_language = async () => {
const lang = await AsyncStorage.getItem('language');
console.log(lang);
something_useful(lang);
return lang;
}