2017-09-28 4 views
0

AsyncStorageに格納されている数値(文字列として保存されています)をネイティブの数値に変換するにはどうすればよいですか?AsyncStorageに格納されている変数を変換してNumberに変換します。

それは、このような文字列を数値に変換する働き:

myNum = Number('3'); // THIS WORKS 

しかし、これは動作しません:私はAsyncStorageから私の変数を取得して、状態として格納しています

myNum = Number(this.state.myStateNum); // This does not work, returns zero 

myNum = Math.floor(this.state.myStateNum); // This does not work, returns zero 

けどなぜ私はそれを数値に変換できないのか分かりません。これは私が非同期を使用して取得する方法である

async function setItem(key, value) { 
    try { 
    await AsyncStorage.setItem(key, value); 
    console.log(key, value); 
    return value; 
    } catch (error) { 
    } 
} 

setVar = setItem('myStateNum', '3'); 

async componentWillMount() { 
    const myStateNumGet = await AsyncStorage.getItem('myStateNum'); 
    if (myStateNumGet) { 
    this.setState({ myStateNum: myStateNumGet }); 
    } else { 
    this.setState({ myStateNum: false }); 
    } 
} 

任意の提案/ヘルプは素晴らしいことだ

それはこのことができます場合は、私が使用して非同期の設定方法です。あなたはあまりにも他の方法を試すことができますが、上記のあなたのために働く必要があります

myNum = parseInt(this.state.myStateNum); 

+0

あなたはAsyncStorage.getItemから番号を取得している場合は、SETSTATEを使用する前にそれを慰める、参照してください質問の重複しています。 else文が動作しているようです。 – Hariks

+0

私はもともと同じものだと思っていましたが、 'this.state.myStateNum'を呼び出すと変数が文字列として渡されています – Roger

+0

これは文字列になります。渡す前に' this.state.myStateNum'の値は何ですか'parseInt' – Hariks

答えて

0
+0

この戻り値:' NaN' – Roger

+0

'this.state.myStateNum'の生の値は何ですか?それは数字に変換できるものであってはなりません。 「parseInt()のMSNドキュメント」(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt)を参照してください。「parseInt関数は最初の引数を文字列に変換します解析し、整数またはNaNを返します。 –

+0

私は 'console.log(typeof myStateNumGet);'を追加し、コンソールログは 'string'として表示します – Roger

0

ASyncStorage.getItem()プロミスオブジェクトを返すので、これは、ありませんあなたが期待している文字列。

あなたがここにそれについていくつかの詳細情報を見つけることができます:あなたの問題の観点からhttps://facebook.github.io/react-native/releases/0.23/docs/asyncstorage.html

を、私は、のgetItemへのコールバックを受け入れるために、あなたの操作を行う前に、戻り値を確保することができ、そのようにあなたのコードを構築したいです計算。コードは次のようになります。

AsyncStorage.getItem("myStateNum").then((result) => { 
    console.log(result); 
    this.setState({myStateEnum: result}); 
}).done(); 

また、あなたの結果、例えばlet myStateNum = result.valueを取得するために.valueを使用して試みることができます。被験者はかなり錆びていますが、これらの方法はあなたを助けることができるはずです

これが役立つかどうか教えてください。

関連する問題