UNPKG

uniapp-tracing

Version:

uniapp小程序端埋点

71 lines (60 loc) 2.06 kB
// Config import { tracingQueueKey } from "../config/cache-keys"; import { sendOption } from "../config/setting"; import { platform, deviceId, initOption } from "../config/constants"; // Hooks import { getCookie, removeCookie, setCookie } from "../hooks/useCookie"; import useRequest from "../hooks/useRequest"; /** * 获取本地缓存的埋点队列数据 * @returns 埋点队列数据 */ function getCurrentQueue() { return getCookie(tracingQueueKey) || []; } /** * 获取要发送至服务器的埋点数据 * @param {Array} eventInfo 埋点队列数据 */ function formatTracingData(eventInfo = []) { // 注意:针对超充小程序的缓存拿userId const { userId = "" } = getCookie("KYI_USERINFO") || {}; const { appName } = initOption; const basicInfo = { appName, platform, deviceId, userId }; return { basicInfo, eventInfo }; } /** * 发送埋点 * 注意:失败时合并当前缓存数据一并发送 * @param {Array} eventInfo 要发送的埋点事件 */ async function sendQueue(eventInfo = []) { const data = formatTracingData(eventInfo); try { // 删除队列记录再发送至服务器,避免失败时再发送时埋点信息重复 removeCookie(tracingQueueKey); await useRequest(data); } catch (error) { // 发送失败再缓存合并至本地 const currentQueue = getCurrentQueue(); const queue = [...eventInfo, ...currentQueue]; setCookie(tracingQueueKey, queue); } } /** * 埋点数据处理延迟发送 * 1.小于最大缓存数,记录于本地缓存,< max * 2.达到最大缓存数发送埋点数据,>= max * @param {Object} event 一个类型的埋点数据 */ async function handleQueue(event = {}) { const eventInfo = getCurrentQueue(); eventInfo.push(event); // 小于最大缓存数时,记录在本地缓存 if (eventInfo.length < sendOption.max) { setCookie(tracingQueueKey, eventInfo); return; } sendQueue(eventInfo); } export default handleQueue;