AsyncStorage 使用来自 Promise 的布尔值

AsyncStorage use boolean from Promise

嗨,我是 React Native 的新手,我有一个关于 asyncStorage 的问题。我想将缓存状态存储在我的 pdf 屏幕中。缓存是源的一个参数,句柄只是布尔值。我做了一个 onPress,它改变了状态并将其存储在我的本地存储中,它可以工作,当我 console.log 我的 getItem 它也显示 true 或 false 时它也可以工作。但这是我的问题。现在我只想使用此 getItem 中的 true 或 false,因为参数缓存只能处理布尔值。在我的搜索中,我能找到的最好的是 Promise Boolean for my function。所以如果你能帮助我,那将是不可思议的,因为我真的不知道。非常感谢你,对不起我的英语。

这是我的代码 //

  export class Liste extends React.PureComponent {
   constructor(props) {
   super(props);
   this.state = {
      navigation : props.navigation,
      route: props.route,
      selectedIndex : this.selectedIndex,
      page : this.page,
      numberOfPages : this.numberOfPages,
      filePath : [],
      cache : false,
  };
  }

  saveCache()  {
    AsyncStorage.setItem('cache', JSON.stringify(this.state.cache));
    console.log(`store ${this.state.cache}`);
  }

  async getCache () {
  const ta = await AsyncStorage.getItem('cache', (value) => {
    JSON.parse(value)
   })
    console.log(ta)
  }

  navigateBack = () => {
   this.state.navigation.goBack();
  };

  BackAction = () => (
    <TopNavigationAction icon={BackIcon} onPress={this.navigateBack}/>
  );

  render() {
  const {files} = this.state.route.params;
  const cache = this.state.cache;
  const bool = this.getCache();
  return (
    <>
      <TopNavigation style={{ borderWidth: 1 }} title='Mes Articles' alignment='center' accessoryLeft={this.BackAction} />
      <ViewPager
        selectedIndex={this.state.selectedIndex}
        onSelect={ index =>  this.setState({ selectedIndex: index })}>
        {files.map((file, i) =>
          <Layout style={styles.tab} level='2'>
            <Text>{file.filename}</Text>
            <Text>Article: {i + 1} / {files.length}                page: {this.state.page} / {this.state.numberOfPages}</Text>
            <View>
              <TopNavigationAction icon = {emailIcon} onPress={() =>  Share.open({ title: 'Pdf file', message: `bonjour voici l'article pdf ${file.filename}`, url: `file:///${this.state.filePath[i]}`, subject: `Article Pdf ${file.filename}` })} status='Partager'>
                Partager
              </TopNavigationAction>
              <TopNavigationAction icon = {pin} onPress ={() => this.saveCache(cache === true ? this.setState({cache : false})  : this.setState({cache : true}))}  status='Partager'>
                Partager
              </TopNavigationAction>
              <TopNavigationAction icon = {pin} onPress ={() => console.log(this.getCache())}  status='Partager'>
                Partager
              </TopNavigationAction>
            </View>
            <Pdf
              source={{ uri: `http://10.1.0.248/${file.path}/${file.filename}`, cache : bool}}
              style={styles.pdf}
              enablePaging={true}
              onLoadComplete={(numberOfPages, filePath) => {
                this.state.filePath.push(filePath);
                this.setState({ numberOfPages: numberOfPages });
              }}
              onPageChanged={(page, numberOfPages) => {
                this.setState({ page: page });
              }}
              />
          </Layout>
        )}
      </ViewPager>
    </>
  );
  }
 }

你可以这样使用它。

await AsyncStorage.getItem('cache'); returns 您可以解析和使用的 JSON 字符串化值。

 async getCache () {
  const ta = await AsyncStorage.getItem('cache');
   console.log(JSON.parse(ta))
}

同用

let ta = await AsyncStorage.getItem('cache');
ta = JSON.parse(ta);