Sqlite 使用asyncstorage.getItem响应本机array.map

Sqlite 使用asyncstorage.getItem响应本机array.map,sqlite,react-native,asyncstorage,Sqlite,React Native,Asyncstorage,我一直在尝试使用react native从异步存储中检索数据 以下是我迄今为止所做的工作: import React, { Component } from 'react'; import { Text, } from 'react-native'; class GetData extends Component { constructor() { super() this.state = { dataLocalIds: [ "data1D

我一直在尝试使用react native从异步存储中检索数据

以下是我迄今为止所做的工作:

import React, { Component } from 'react';

import {
  Text,
} from 'react-native';

class GetData extends Component {
  constructor() {
    super()
    this.state = {
      dataLocalIds: [
        "data1Data",
        "data2Data",
        "data3Data",
        "data4Data",
        "data5Data",
        "data6Data"
      ],
    }

    this.state.dataLocalIds.map((value, index) => {
      this.data = this.getDatas(value, index);
    })
  }

  async getDatas(value, index) {
    try {
      const value = await AsyncStorage.getItem(value).then(val => {
        return JSON.parse(val)
      });
      return value
    } catch (err) {
      throw err
    }
  }

  renderScreen = () => {
      return (
        <Text> Hello World </Text>
      );
  }

  render() {
    return (
      this.renderScreen()
    );
  }
}

export default GetData;
import React,{Component}来自'React';
进口{
文本,
}从“反应本机”;
类GetData扩展组件{
构造函数(){
超级()
此.state={
数据本地化:[
“data1Data”,
“data2Data”,
“data3Data”,
“data4Data”,
“data5Data”,
“data6Data”
],
}
this.state.dataLocalIds.map((值,索引)=>{
this.data=this.getDatas(值、索引);
})
}
异步getDatas(值、索引){
试一试{
const value=wait AsyncStorage.getItem(值)。然后(val=>{
返回JSON.parse(val)
});
返回值
}捕捉(错误){
失误
}
}
渲染屏幕=()=>{
返回(
你好,世界
);
}
render(){
返回(
这个文件名为renderScreen()
);
}
}
导出默认GetData;
问题是:应用程序崩溃并出现错误,“索引1处的绑定值为空”

Stacktrace不指向代码中的行。相反,它指向sqlite和asyncstorage


我真的不知道如何解决这个问题。非常感谢您的帮助。

嗨,MacFlyer,您是否尝试过使用multiget()

可能是由于getData()方法的参数名为value,并且在try块中声明了一个新变量const value造成的

当值传递给AsyncStorage时,如果发现一个变量被声明(JS解析和标记化阶段),但其值是
未定义的,则它将搜索对立即作用域(try block)的引用。因此,
undefined
被传递给AsyncStorage.getItem方法

尝试重命名其中一个。我想构造函数中的this.myFunction=this.myFunction.bind(this)
可以解决这个问题

你还有一个问题

Getdatas函数是异步的,并返回承诺 (二)

3) 名为
value
的变量已在geDatas范围内声明

尝试修复并让我们知道

尝试以下方法:

constructor(){
    super();

    this.state={...}
    this.getDataFromAsyncStorage()
}
async getDataFromAsyncStorage() {
    let dataArray = [];
    for (let value of this.state.localIds){
        let data = await AsyncStorage.getItem(value);
        dataArray.push(data)
    }
    this.data = dataArray;
}

我试试看。谢谢另外,添加检查AsyncStorage是否发现数据丢失,但我相信这种逻辑不会有您当前代码所面临的问题,所以我想它只需要一些改进
constructor(){
    super();

    this.state={...}
    this.getDataFromAsyncStorage()
}
async getDataFromAsyncStorage() {
    let dataArray = [];
    for (let value of this.state.localIds){
        let data = await AsyncStorage.getItem(value);
        dataArray.push(data)
    }
    this.data = dataArray;
}