将存储在AsyncStorage中的变量转换为Number

时间:2017-09-28 08:37:26

标签: react-native expo

如何将AsyncStorage存储的数字(存储为字符串)转换为本机中的数字(我正在使用Expo)。

它可以将字符串转换为这样的数字:

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

但这不起作用:

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

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

我从AsyncStorage获取变量然后存储为状态,但我无法弄清楚为什么我无法将其转换为数字。

如果这有助于我使用async进行设置:

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

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

这就是我使用async的方式:

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

任何建议/帮助都会很棒。

3 个答案:

答案 0 :(得分:0)

试试这个......

myNum = parseInt(this.state.myStateNum);

您也可以尝试其他方法,但上述内容对您有用... https://coderwall.com/p/5tlhmw/converting-strings-to-number-in-javascript-pitfalls

答案 1 :(得分:0)

这是因为ASyncStorage.getItem()返回Promise对象,而不是您期望的字符串。

您可以在此处找到有关此内容的更多信息: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();

您也可以尝试使用.value来获取结果,例如let myStateNum = result.value。在这个问题上相当生疏,但这些方法应该能够帮助你

如果有帮助,请告诉我。

答案 2 :(得分:0)