Реакция родного обещания и очереди - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть локализация в моем проекте; и перед вызовом компонента я хочу вызвать метод setI18nConfig (), который отвечает за языки. Но когда я его вызываю, сначала обрабатывается компонент, а затем этот метод. То есть этот метод становится последним в очереди. Я думаю, что это из-за обещания. Но что может повлиять на проблему, чтобы решить ее

Приложение. js

import {setI18nConfig} from './src/localesConfig';
import StackNavigator from './src/routes/homeStack';

export default class App extends Component {
  constructor(props) {
    super(props);
    setI18nConfig(); // <---- here
  }

  render() {
    return (StackNavigator());
  }
}

localesConfig. js

export async function getCurrentLanguage() {
  try {
    return await AsyncStorage.getItem('Language');
  } catch (e) {
    // error reading value
  }
}

export const translationGetters = {
  // lazy requires (metro bundler does not support symlinks)
  en: () => require('./translations/en.json'),
  ru: () => require('./translations/ru.json'),
};

export const setI18nConfig = () => {
  i18n.missingTranslation = function(key) {
    return key;
  };
  // fallback if no available language fits
  const fallback = {languageTag: 'en', isRTL: false};

  const isRTL = fallback.isRTL;
  getCurrentLanguage().then(val => { //<----here quee
    const languageTag = val || fallback.languageTag;
    // clear translation cache
    translate.cache.clear();
    // update layout direction
    I18nManager.forceRTL(isRTL);
    // set i18n-js config
    i18n.translations = {[languageTag]: translationGetters[languageTag]()};
    i18n.locale = languageTag;
  });

homeBottomTabs. js

render() {
    return (
      <View>
        <Text>{translate('password')}</Text>
      </View>
    );
  }export default function RootTab() {
  return (
    <BottomTab.Navigator
      screenOptions={{gestureEnabled: false}}
      tabBarOptions={{
        tabStyle: {
          justifyContent: 'center',
          alignItems: 'center',
        },
        showIcon: false,
      }}>
      <BottomTab.Screen
        name="Main"
        component={MainScreen}
        options={{title: translate('Menu:Home'), headerShown: false}}
      />
      <BottomTab.Screen
        name="Chat"
        component={ChatScreen}
        options={{title: translate('Menu:Chat'), headerShown: false}}
      />
    </BottomTab.Navigator>
  );
}

И когда вызывается главный экран (то есть, когда приложение запускается), в результате я получаю это , но должно быть 1021 *

...