实例方法

在初始化完成后,我们会得到一个 tua-storage 的实例。实例上会有以下方法。

save 异步保存

异步保存,可以接收一个对象,或是对象数组。

// 返回一个 Promise
tuaStorage
    .save({
        key: 'data key',
        data: { foo: 'bar' },
    })
    .then(console.log)
    .catch(console.error)


// 保存到 storage 中的数据大概长这样
// key 之前会加上初始化传入的默认前缀
{
    'TUA_STORAGE_PREFIX: data key': {
        expires: 30,
        rawData: { foo: 'bar' },
    },
}

key 关键词

  • 类型:String
  • 必须传递不可省略

data 被保存数据

  • 类型:Any
  • 默认值:undefined

expires 过期时间(单位:秒)

  • 类型:Number
  • 默认值:30

默认 expires30 秒,当然你也可以指定别的时间,例如一小时 3600,一天 3600 * 24,甚至是永久 null

syncParams 同步参数对象

  • 类型:Object
  • 默认值:{}

当要保存的字符串中有类似 foo?a=a&b=b 的结构时,使用 syncParams 生成 key 将十分方便。

tuaStorage.save({
    key: 'data key',
    data: { foo: 'bar' },
    expires: 3600,
    syncParams: { a: 'a', b: '中文' },
})

// 保存到 storage 中的数据大概长这样
{
    'TUA_STORAGE_PREFIX: data key?a=a&b=%E4%B8%AD%E6%96%87': {
        expires: 3600,
        rawData: { foo: 'bar' },
    },
}

fullKey 完整关键词

  • 类型:String
  • 默认值:''

当你不需要添加前缀,希望指定一个固定的 key 时,可以这么写

tuaStorage.save({
    fullKey: 'data key',
    data: { foo: 'bar' },
})

// 保存到 storage 中的数据大概长这样
{
    'data key': {
        expires: 30,
        rawData: { foo: 'bar' },
    },
}

WARNING

fullKeykeysyncParams 同时出现时,fullKey 有最高优先级

isEnableCache 是否使用内存缓存

  • 类型:Boolean
  • 默认值:true

默认为 true,当下次读取数据时可以直接从内存中读取。

TIP

别忘了还可以传递数组,保存多个数据哟~

tuaStorage.save([{
    key: 'data key',
    data: { foo: 'bar' },
    expires: 3600,
    syncParams: { a: 'a', b: '中文' },
}, {
    key: 'another data',
    data: 'some data',
}])

saveSync 同步保存 1.5.0+

save 方法的同步版本,在不支持同步方法的场景(AsyncStorage)下会抛出错误。

try {
    tuaStorage.saveSync({
        key,
        data,
        expires,
        fullKey,
        syncParams,
        isEnableCache,
    })
} catch (e) {
    // Do something when catch error
}

load 异步读取

异步读取,可以接收一个对象,或是对象数组。

// 返回一个 Promise
tuaStorage.load({ key: 'data key' })
    .then(console.log)
    .catch(console.error)

// 或是使用 async/await
async () => {
    try {
        const data = await tuaStorage.load({ key: 'data key' })
        console.log(data)
    } catch (e) {
        console.error(e)
    }
}

key 关键词

  • 类型:String
  • 必须传递不可省略

syncFn 同步函数

  • 类型:Function
  • 默认值:undefined 或是初始化时 syncFnMap 中的对应函数

TIP

当数据不存在或已过期时,调用同步函数进行数据同步。详细使用方法请参阅 数据同步 章节。

syncParams 同步参数对象

  • 类型:Object
  • 默认值:{}

调用同步函数时传递参数。

syncOptions 同步函数配置 1.7.0+

  • 类型:Any
  • 默认值:[]

因为 syncFn 默认只接受 syncParams 作为参数,在使用时不太方便。尤其是搭配 tua-api 使用时,没法方便地传递 运行时配置

因此添加了 syncOptions 用于传递 syncFn 函数的其他参数。

syncOptions 类型为数组时,以这样的方式调用。

syncFn(syncParams, ...syncOptions)

即数组的各个元素分别作为 syncFn 的第二个到第 n 个参数。

其他类型时,以这样的方式调用 syncFn(syncParams, syncOptions),即作为第二个参数。

fullKey 完整关键词

  • 类型:String
  • 默认值:''

当你不需要添加前缀,希望指定一个固定的 key 时使用。

isAutoSave 是否自动保存

  • 类型:Boolean
  • 默认值:true

默认为 true,在调用 syncFn 后,是否自动保存到 storage 中。

expires 过期时间(单位:秒)

  • 类型:Number
  • 默认值:30

默认 expires30 秒,如果选择自动保存则会透传给 save 函数。

isEnableCache 是否使用内存缓存

  • 类型:Boolean
  • 默认值:true

默认为 true,是否优先读取内存。

isForceUpdate 是否直接调用 syncFn 1.4.0+

  • 类型:Boolean
  • 默认值:false

默认为 false,当你需要立即同步数据时,将该项置为 true。常用于小程序下拉刷新的场景。

TIP

别忘了还可以传递数组,读取多个数据哟~将会以 Promise.all 的形式调用。

loadSync 同步读取 1.5.0+

load 方法的同步版本,在不支持同步方法的场景(AsyncStorage)下会抛出错误。

try {
    const data = tuaStorage.loadSync({
        key,
        fullKey,
        syncParams,
        isEnableCache,
    })

    // Do something with return value
} catch (e) {
    // Do something when catch error
}

WARNING

同步读取时,不支持传递 syncFn 等参数,无法在没有数据时进行数据同步操作。

remove 异步删除

异步删除,可以接收一个字符串,对象,或是对象数组。

key 关键词

  • 类型:String
  • 必须传递不可省略
// 返回一个 Promise
tuaStorage.remove('data key')
    .then(console.log)
    .catch(console.error)

WARNING

注意这样删除的是 key'TUA_STORAGE_PREFIX: data key' 的数据

fullKey 完整关键词

  • 类型:String
  • 默认值:''

当你保存数据时选择了 fullKey,删除时可以传递一个对象,同样传递 fullKey 删除该数据。

// 返回一个 Promise
tuaStorage.remove({ fullKey: 'data key' })
    .then(console.log)
    .catch(console.error)

这时删除的就是 key'data key' 的数据了。

TIP

别忘了还可以传递数组,删除多个数据哟~

removeSync 同步删除 1.5.0+

remove 方法的同步版本,在不支持同步方法的场景(AsyncStorage)下会抛出错误。

try {
    tuaStorage.removeSync(key)
} catch (e) {
    // Do something when catch error
}

clear 异步清除

异步清除非白名单中的所有缓存数据。

// 返回一个 Promise
tuaStorage.clear()
    .then(console.log)
    .catch(console.error)

whiteList 白名单

  • 类型:String[]
  • 默认值:[]

在清除数据时,可能有些数据你还想保留。那么此时可以传递一个字符串数组。

// 返回一个 Promise
tuaStorage.clear(['key'])
    .then(console.log)
    .catch(console.error)

// 假设现在 storage 中有以下数据
{
    'foo': {},
    'bar': {},
    'foo-key': {},
    'bar-key': {},
}

// 清除后剩下的数据是
{
    'foo-key': {},
    'bar-key': {},
}

TIP

因为内部是通过 indexOf 来判断的,所以不必填写完整的 key 值。

clearSync 同步清除 1.5.0+

clear 方法的同步版本,在不支持同步方法的场景(AsyncStorage)下会抛出错误。

try {
    tuaStorage.clearSync(whiteList)
} catch (e) {
    // Do something when catch error
}

getInfo 获取相关信息 1.5.0+

异步获取当前 storage 的相关信息。

getInfoSync 同步获取相关信息 1.5.0+

getInfo 方法的同步版本,在不支持同步方法的场景(AsyncStorage)下会抛出错误。

try {
    const {
        // 各种场景下都会有
        keys,

        // 小程序场景下才有
        limitSize
        currentSize,
    } = tuaStorage.getInfoSync()

    // Do something with return value
} catch (e) {
    // Do something when catch error
}

其他方法、场景

如果你还有什么其他需要的方法或场景,可以填写 issues,或者直接提个 Pull Request 吧~。