返回AsyncStorage(getItem)中的键值而不是promise

时间:2017-11-01 16:34:54

标签: javascript react-native promise asyncstorage

我想在另一个函数中使用存储在AsyncStorage中的值。

这是我的ValueHandler.js

import { AsyncStorage } from 'react-native';

export async function getSavedValue() {
  try {
    const val = await AsyncStorage.getItem('@MyStore:savedValue');
    console.log("#getSavedValue", val);
    return val;
  } catch (error) {
    console.log("#getSavedValue", error);
  }
  return null;
}

我使用上面的函数getSavedValue()来获取存储在AsyncStorage中的savedValue的值。

import {getSavedValue} from '../lib/ValueHandler';
import Api from '../lib/Api';

export function fetchData() {
  return(dispatch, getState) => {
    var params = [
      'client_id=1234567890',
    ];
    console.log("#getSavedValue()", getSavedValue());
    if(getSavedValue() != null) {
      params = [
        ...params,
        'savedValue='+getSavedValue()
      ];
    }
    params = params.join('&');
    console.log(params);
    return Api.get(`/posts/5132?${params}`).then(resp => {
      console.log(resp.posts);
      dispatch(setFetchedPosts({ post: resp.posts }));
    }).catch( (ex) => {
      console.log(ex);
    });
  }
}

我如何实现这一目标?我真的想要一个简单的方法来保存本地存储中的值,并在我需要进行API调用时检索它。

有人对此有任何建议或解决方案吗?

2 个答案:

答案 0 :(得分:0)

您可以这样做:

import { AsyncStorage } from 'react-native';

export async function getSavedValue() {
    return new Promise ((resolve, reject) => { 
      try {
        const val = await AsyncStorage.getItem('@MyStore:savedValue');
        console.log("#getSavedValue", val);
        resolve(val);
      }catch (error) {
        console.log("#getSavedValue", error);
        reject(error)
      }  
   })
}


import {getSavedValue} from '../lib/ValueHandler';
import Api from '../lib/Api';

export function fetchData() {
  return async (dispatch, getState) => {
    var params = [
      'client_id=1234567890',
    ];
    console.log("#getSavedValue()", getSavedValue());
    if(getSavedValue() != null) {
      params = [
        ...params,
        'savedValue='+ await getSavedValue()
      ];
    }
    params = params.join('&');
    console.log(params);
    return Api.get(`/posts/5132?${params}`).then(resp => {
      console.log(resp.posts);
      dispatch(setFetchedPosts({ post: resp.posts }));
    }).catch( (ex) => {
      console.log(ex);
    });
  }
}

答案 1 :(得分:0)

试试这个:

... ucUltraGridMain.Grid.DisplayLayout.Bands[0].Columns[2] 添加到async,以便您可以等待

return (dispatch, getState) => {