AsyncStorage(异步存储)

AsyncStorage 是一个简单的, 异步的, 持久化的Key-Value存储系统, 它对于App来说是全局性的. 它用来代替LocalStorage..

建议您在 AsyncStorage 的基础上做一层抽象封装,而不是直接使用 AsyncStorage.

在 iOS 端, AsyncStorage 是本地代码返回的, 本地代码在字典中存储较小的值和咋文件中存储较大的值.

在 Android 端, AsyncStorage 用 RocksDB 或者 SQLite 取决于哪个可用.

AsyncStorage的JS代码提供一个更清晰的JS API、返回真正的错误对象, 以及简单的单个函数. API中的每个方法都会返回一个 Promise 对象.

写入数据:

  try {

    await AsyncStorage.setItem('@MySuperStore:key', 'I like to save it.');

  } catch (error) {

    // Error saving data

获取数据:

  try {

    const value = await AsyncStorage.getItem('@MySuperStore:key');

    if (value !== null){

      // We have data!!

      console.log(value);

    }

  } catch (error) {

    // Error retrieving data

  }

方法

static  getItem (key: string, callback?: ?(error: ?Error, result: ?string) => void)

通过 key 获得值 , 并调用此函数. 返回一个 Promise 对象.

Parameters:
Name and Type Description
key

string

获得值的键.

[callback]

?(error: ?Error, result: ?string) => void

发生任何错误将回调此函数.

static  setItem (key: string, value: string, callback?: ?(error: ?Error) => void)

设置一个 key 值 , 并调用此函数. 返回一个 Promise 对象.

Parameters:
Name and Type Description
key

string

设置item的键.

value

string

key的值.

[callback]

?(error: ?Error) => void
发生任何错误将回调此函数.

static  removeItem (key: string, callback?: ?(error: ?Error) => void)

删除一个 key 的值 , 并调用此函数. 返回一个 Promise 对象.

Parameters:
Name and Type Description
key

string

删除的key.

[callback]

?(error: ?Error) => void

发生任何错误将回调此函数.

static  mergeItem (key: string, value: string, callback?: ?(error: ?Error) => void)

合并现有的 key 值 , 加入两个值都是 JSON 格式字符串的话. 返回一个 Promise 对象.

NOTE: 这里不支持所有的原生实现.

Parameters:
Name and Type Description
key

string

原有的key.

value

string

新的key.

[callback]

?(error: ?Error) => void
发生任何错误将回调此函数.

示例:

let UID123_object ={

  name: 'Chris',

  age: 30,

  traits: {hair: 'brown', eyes: 'brown'},

};

// You only need to define what will be added or updated

let UID123_object ={

  age: 31,

  traits: {eyes: 'blue', shoe_size: 10}

};


AsyncStorage.setItem('UID123', JSON.stringify(UID123_object), () => {

  AsyncStorage.mergeItem('UID123', JSON.stringify(UID123_delta), () => {

    AsyncStorage.getItem('UID123', (err, result) => {

      console.log(result);

    });

  });

});

// Console log result:

// => {'name':'Chris','age':31,'traits':

// {'shoe_size':10,'hair':'brown','eyes':'blue'}}

static  clear (callback?: ?(error: ?Error) => void)

删除所有的 AsyncStorage 信息. 我们可能不希望使用这个; 可以使用 removeItem 或者 multiRemove 来删除你的 key. 返回一个 Promise 对象.

Parameters:
Name and Type Description
[callback]

?(error: ?Error) => void

发生任何错误将回调此函数.

static  getAllKeys (callback?: ?(error: ?Error, keys: ?Array) => void)

获得所有的 key. 返回一个 Promise 对象.

Parameters:
Name and Type Description
[callback]

?(error: ?Error, keys: ?Array<string>) => void

发生任何错误将回调此函数.

static  flushGetRequests ()

Flushes any pending requests using a single batch call to get the data.

static  multiGet (keys: Array, callback?: ?(errors: ?Array, result: ?Array>) => void)

我们可以批量获取 key 的值, 回调函数的参数是一个二维数组, 数组内以键值对的形式表示:

multiGet(['k1', 'k2'], cb) -> cb([['k1', 'val1'], ['k2', 'val2']])

这个方法返回 Promise 对象.

Parameters:
Name and Type Description
keys

Array<string>

key的数组.

[callback]

?(errors: ?Array<Error>, result: ?Array<Array<string>>) => void

参数是一个键值对的数组, 另外如有任何错误也会加入数组内.

示例:

AsyncStorage.getAllKeys((err, keys) => {

  AsyncStorage.multiGet(keys, (err, stores) => {

    stores.map((result, i, store) => {

      // You only need to define what will be added or updated

      let key = store[i][0];

      let value = store[i][1];

    });