UNPKG

@qiniu/miku-delivery-mp-ks

Version:

Kuaishou Mini Program SDK for Miku Delivery

128 lines (127 loc) 4.42 kB
/** * @file 持久化存储 * @desc 根据 mpPlatform 的不同调用不同环境的持久化存储 API */ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { mpPlatform } from '../utils/env'; import { getDebug } from './debug'; const debug = getDebug('utils/storage'); /** 获取 `key` 对应的值,若不存在则返回 `undefined` */ export function getStorage(key) { switch (mpPlatform) { case 'wx': return getStorageWx(key); case 'tt': return getStorageTt(key); case 'ks': return getStorageKs(key); } } function getStorageWx(key) { return __awaiter(this, void 0, void 0, function* () { try { const resultFromStorage = (yield wx.getStorage({ key })).data; return resultFromStorage; } catch (e) { debug('get resolve result from storage failed:', e); // 微信小程序找不到对应值也会体现为抛错,这里简单地将抛错都认为是找不到对应值 return undefined; } }); } function getStorageTt(key) { return new Promise(resolve => { tt.getStorage({ key, success: res => resolve(res.data), fail: res => { // 抖音小程序找不到对应值也会体现为抛错,这里简单地将抛错都认为是找不到对应值 debug('get resolve result from storage failed:', res); resolve(undefined); } }); }); } // 快手小程序不支持 key 里包含 `/`,这里做下转换 function adaptKeyForKs(key) { return key.replace(/\//g, ':'); } function getStorageKs(key) { return __awaiter(this, void 0, void 0, function* () { key = adaptKeyForKs(key); try { const resultFromStorage = (yield ks.getStorage({ key })).data; return resultFromStorage; } catch (e) { debug('get resolve result from storage failed:', e); // 快手小程序找不到对应值也会体现为抛错,这里简单地将抛错都认为是找不到对应值 return undefined; } }); } /** 指定 `key` 存储对应的值 */ export function setStorage(key, data) { switch (mpPlatform) { case 'wx': return setStorageWx(key, data); case 'tt': return setStorageTt(key, data); case 'ks': return setStorageKs(key, data); } } function setStorageWx(key, data) { return __awaiter(this, void 0, void 0, function* () { try { yield wx.setStorage({ key, data }); } catch (e) { throw new StorageError('setStorage failed', e); } }); } function setStorageTt(key, data) { return new Promise((resolve, reject) => { tt.setStorage({ key, data, success: () => resolve(), fail: res => reject(new StorageError('setStorage failed', res)) }); }); } function setStorageKs(key, data) { return __awaiter(this, void 0, void 0, function* () { key = adaptKeyForKs(key); try { yield ks.setStorage({ key, data }); } catch (e) { throw new StorageError('setStorage failed', e); } }); } /** 操作持久化存储失败 */ export class StorageError extends Error { constructor(message, /** 失败详情 */ detail) { super(message); Object.defineProperty(this, "detail", { enumerable: true, configurable: true, writable: true, value: detail }); Object.defineProperty(this, "name", { enumerable: true, configurable: true, writable: true, value: 'StorageError' }); } }