2017-11-13 5 views
1

내 문제는이 함수에서 json을 얻고 싶지만, 내가 얻는 것은 오직 약속 일 뿐이며, 내가이 방식을 선택하는 이유는 앱에서 작동하고 있기 때문입니다. 이 동적으로하지만 난이 약속을 넣을 수 있습니다 볼 수있는 유일한 장소 렌더링은()약속을 반환을 네이티브 반응하는 방법

이 내 코드입니다 :

var userInfo = (async()=>{ 
    var value = await AsyncStorage.getItem("@user_info"); 
    value = JSON.parse(value); 
    return value ; 
    })(); 

이 내 결과입니다

Promise { 
"_40": 0, 
"_55": null, 
"_65": 0, 
"_72": null, 
} 

하지만 난이 원하는 것을 얻는 것은 json이다 무엇 내가해야 되겠니?

답변

0

이 기능은 componentDidMount에서 호출해야하며 약속이 완료되면 setState으로 전화하십시오.

class User extends React.Component { 
    state = { user: null }; 

    render() { 
    return this.state.user && <div>{this.state.user.name}</div>; 
    } 

    async componentDidMount() { 
    const value = await AsyncStorage.getItem("@user_info"); 
    if (!this._unmounted) { 
     const user = JSON.parse(value); 
     this.setState({ user: user }); 
    } 
    } 

    componentWillUnmount() { 
    this._unmounted = true; 
    } 
} 
+0

이 매우 좋은 방법입니다하지만 난 화면 상태를 변경 한 후 여전히 값이 포함이 당신은 내가 전에 테스트 당신이 – shahabvshahabi

+0

일이 싶지 않는 것입니다 'userInfo.then()'을 사용할 수 있기를 원한다면, 반환 된 값이 아닌 – Brandon

0

나는 당신의 기능은 자동 실행하기 때문에이 생각 :

다음은이 작업을 수행하는 방법에 대한 정식 예입니다.

당신은 AsyncStore.getItem으로

var userInfo = async() => { 
    var value = await AsyncStorage.getItem("@user_info"); 
    value = JSON.parse(value); 
    return value ; 
    }); 

이 약속 자체 실행을 제거하면 당신은 또한 당신은 value.json을 반환해야

const userInfo =() => { 
    AsyncStorage.getItem("@user_info").then((response) => { 
    console.log(response); 
    }); 
} 
+0

을 설명하는 것을 보여주는 코드 예제와 함께 질문을 업데이트해야 – shahabvshahabi

+0

함수를 가져 오면, AsyncStorage.getItem ("@ user_info"); –

0

.then 방법을 사용할 수있는 값에 액세스 할 수 있어야합니다(). 또한이

var userInfo = (async()=>{ 
    var value = await AsyncStorage.getItem("@user_info"); 
    return value.json() ; 
    })(); 

을 시도 AsyncStorage.getItem는 오류 프로세스

동안 일어난 경우 비동기 기능, 당신은 경우에 시도 및 캐치에 그 포장 할 필요가있다 : 당신이 사용하는 경우 비동기로 명시 적으로 선언되지 않은 함수 내부에서 기다리면 예상치 못한 토큰 구문 오류가 발생합니다.

async userInfo(){ 
    try{ 
     var value = await AsyncStorage.getItem("@user_info"); 
     return value.json() ; 
    } 
    catch(e){ 
     console.log('caught error', e); 
     // Handle exceptions 
    } 
} 
관련 문제