2017-04-30 19 views
0

我有這個異步代碼函數從AsyncStorage獲取lang var。我想在構造(?)方法的每個應用程序頁面上調用此函數。但是當我嘗試調用它時,它看起來像代碼運行同步,並且我的loadedLang = {_45:0,_81:0,_65:null,_54:null}。如何以正確的方式做到這一點?謝謝。如何從導入調用異步函數?

main.js

import load from "./components/languageLoad" 
       constructor(props) { 
        super(props); 

        let loadedLang = load(); 
        console.log("LOADED", loadedLang); 

        this.state = { 
         settings: 1, 
         deviceLocale: "EMPTY" 
        }; 
       } 

languageLoad.js

import React, { Component } from 'react'; 
import { AsyncStorage} from 'react-native'; 
import Lang from 'react-native-i18n' 

export default load = async() => { 
      try { 
       const customLang = await AsyncStorage.getItem('customLang'); 
       if (customLang !== null && customLang !== undefined && customLang !== "") { 
        deviceLocale = customLang; 
       } 

      } catch (error) { 
       deviceLocale = Lang.locale.split("-")[0] || "uk"; 
      } 
      console.log("------------", deviceLocale, '-------------'); 
      console.log("------------", Lang.t('aboutAppText') , '-------------'); 
      Lang.locale = deviceLocale; 
      return Lang; 
     } 

回答

3

async功能需要與await被調用,只能從異步函數中調用。

JS構造函數不能是異步的。因此,你將重構你的代碼以不同的方式工作。可以在構造函數之外加載數據,也可以在構造函數中使用匿名自執行異步函數來加載數據並將其存儲。當然,其他同學需要處理數據可能不存在的事實。