首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

AsyncStorage

AsyncStorage是一款简单的,未加密的异步持久性键值存储系统,对于应用程序而言是全局的。应该使用它来代替LocalStorage。

因为它是可以全局操作的,所以建议您在其上面使用抽象AsyncStorage,而不是直接使用AsyncStorage。

在iOS上,AsyncStorage由本地代码支持,将较小的值存储在序列化的字典中,并将更大的值存储在单独的文件中。在Android上,AsyncStorage将使用基于可用的RocksDB或SQLite。

AsyncStorageJavaScript代码是一个简单的外观,提供了一个清晰的JavaScript API,真实Error对象,以及简单的非多的功能。API中的每个方法都会返回一个Promise对象。

坚持数据:

代码语言:javascript
复制
try {
  await AsyncStorage.setItem('@MySuperStore:key', 'I like to save it.');
} catch (error) {
  // Error saving data
}

正在提取数据:

代码语言:javascript
复制
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对象。

参数:

名称和类型

描述

KeyString

要提取的项目的键。

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

函数将被调用,如果发现结果或任何错误。

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

设置一个key的值并在完成时调用回调。返回一个Promise对象。

参数:

名称和类型

描述

KeyString

要设置的项目的键。

valueString

为键设置的值。

callback?(error: ?Error) => void

将随任何错误调用的函数。

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

删除一个项目key并在完成时调用回调。返回一个Promise对象。

参数:

名称和类型

描述

KeyString

要删除的项目的键。

callback?(error: ?Error) => void

将随任何错误调用的函数。

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

将现有key值与输入值合并,假定这两个值都是字符串化的JSON。返回一个Promise对象。

注意:这不是所有本地实现都支持的。

参数:

名称和类型

描述

KeyString

要修改的项目的键。

valueString

为关键合并的新值。

callback?(error: ?Error) => void

将随任何错误调用的函数。

例:

代码语言:javascript
复制
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_delta = {
 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。您可能不想调用它;使用removeItemmultiRemove仅清除您的应用程序的密钥。返回一个Promise对象。

参数:

名称和类型

描述

callback?(error: ?Error) => void

将随任何错误调用的函数。

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

获取您的应用已知的所有密钥; 为所有呼叫者,图书馆等返回一个Promise对象。

参数:

名称和类型

描述

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

将被称为找到的键和任何错误的函数。

static flushGetRequests()

使用单个批处理调用刷新任何待处理的请求以获取数据。

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

这允许您批量给定一组key输入项的提取。您的回调将通过一系列相应的键值对找到:

代码语言:javascript
复制
multiGet(['k1', 'k2'], cb) -> cb([['k1', 'val1'], ['k2', 'val2']])

该方法返回一个Promise对象。

参数:

名称和类型

描述

keysArray<string>

要获取的项目的数组键。

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

将使用结果的键值数组调用函数,以及找到的任何键特定错误的数组。

例:

代码语言:javascript
复制
AsyncStorage.getAllKeys((err, keys) => {
  AsyncStorage.multiGet(keys, (err, stores) => {
   stores.map((result, i, store) => {
     // get at each store's key/value so you can work with it
     let key = store[i][0];
     let value = store[i][1];
    });
  });
});

static multiSet(keyValuePairs: Array<Array<string>>, callback?: ?(errors: ?Array<Error>) => void)

将其用作存储多个键值对的批处理操作。当操作完成后,您将得到一个回调,出现任何错误:

代码语言:javascript
复制
multiSet([['k1', 'val1'], ['k2', 'val2']], cb);

该方法返回一个Promise对象。

参数:

名称和类型

描述

keyValuePairsArray<Array<string>>

要设置的项目的键值数组的数组。

callback?(errors: ?Array<Error>) => void

将使用所发现的任何键特定错误的数组调用该函数。

static multiRemove(keys: Array<string>, callback?: ?(errors: ?Array<Error>) => void)

调用此方法批量删除keys数组中的所有键。返回一个Promise对象。

参数:

名称和类型

描述

keysArray<string>

要删除的项目的键的数组。

callback?(errors: ?Array<Error>) => void

函数将被称为任何键特定错误的数组。

例:

代码语言:javascript
复制
let keys = ['k1', 'k2'];
AsyncStorage.multiRemove(keys, (err) => {
  // keys k1 & k2 removed, if they existed
  // do most stuff after removal (if you want)
});

static multiMerge(keyValuePairs: Array<Array<string>>, callback?: ?(errors: ?Array<Error>) => void)

批处理操作合并给定键集的现有值和新值。这假定这些值是字符串化的JSON。返回一个Promise对象。

注意:这不是所有本地实现都支持的。

参数:

名称和类型

描述

keyValuePairsArray<Array<string>>

要合并的项目的键值数组的数组。

callback?(errors: ?Array<Error>) => void

将使用所发现的任何键特定错误的数组调用该函数。

例:

代码语言:javascript
复制
// first user, initial values
let UID234_object = {
 name: 'Chris',
 age: 30,
 traits: {hair: 'brown', eyes: 'brown'},
};

// first user, delta values
let UID234_delta = {
 age: 31,
 traits: {eyes: 'blue', shoe_size: 10},
};

// second user, initial values
let UID345_object = {
 name: 'Marge',
 age: 25,
 traits: {hair: 'blonde', eyes: 'blue'},
};

// second user, delta values
let UID345_delta = {
 age: 26,
 traits: {eyes: 'green', shoe_size: 6},
};

let multi_set_pairs   = [['UID234', JSON.stringify(UID234_object)], ['UID345', JSON.stringify(UID345_object)]]
let multi_merge_pairs = [['UID234', JSON.stringify(UID234_delta)], ['UID345', JSON.stringify(UID345_delta)]]

AsyncStorage.multiSet(multi_set_pairs, (err) => {
  AsyncStorage.multiMerge(multi_merge_pairs, (err) => {
    AsyncStorage.multiGet(['UID234','UID345'], (err, stores) => {
      stores.map( (result, i, store) => {
        let key = store[i][0];
        let val = store[i][1];
        console.log(key, val);
      });
    });
  });
});

// Console log results:
// => UID234 {"name":"Chris","age":31,"traits":{"shoe_size":10,"hair":"brown","eyes":"blue"}}
// => UID345 {"name":"Marge","age":26,"traits":{"shoe_size":6,"hair":"blonde","eyes":"green"}}

扫码关注腾讯云开发者

领取腾讯云代金券