@qiniu/miku-delivery-mp-ks
Version:
Kuaishou Mini Program SDK for Miku Delivery
128 lines (127 loc) • 4.42 kB
JavaScript
/**
* @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'
});
}
}