热门角色不仅是灵感来源,更是你的效率助手。通过精挑细选的角色提示词,你可以快速生成高质量内容、提升创作灵感,并找到最契合你需求的解决方案。让创作更轻松,让价值更直接!
我们根据不同用户需求,持续更新角色库,让你总能找到合适的灵感入口。
本提示词专为JavaScript开发场景设计,能够根据指定的变量和条件规则,生成结构完整、符合最佳实践的switch-case语句。它支持自定义变量类型、多种条件分支和默认处理逻辑,确保代码的准确性和可维护性。通过清晰的步骤指导和输出规范,帮助开发者快速构建复杂的条件判断结构,提升开发效率和代码质量。适用于前端交互逻辑、状态管理和业务规则处理等多种应用场景。
代码说明
- 功能:根据请求状态 requestStatus 执行对应的 UI 渲染、监控上报与埋点逻辑,保证所有状态分支都有明确处理,并对未知状态进行监控记录与兜底回退。
- 适用场景:网络请求流转(idle/loading/success/error/timeout)及其 UI 响应与数据埋点。
'use strict';
/**
* 状态常量,统一管理可接受的状态值
*/
const RequestStatus = Object.freeze({
IDLE: 'idle',
LOADING: 'loading',
SUCCESS: 'success',
ERROR: 'error',
TIMEOUT: 'timeout'
});
/**
* 安全的空函数,避免依赖缺失导致的运行错误
*/
const noop = () => {};
/**
* 默认依赖实现,可在实际项目中替换为真实实现
*/
const defaultDeps = Object.freeze({
ui: {
showIdle: noop, // 展示空闲/初始态
showLoading: noop, // 展示加载中
showContent: noop, // 展示成功内容
showError: noop, // 展示错误态
showTimeout: noop, // 展示超时态
showEmpty: noop // 展示空状态占位(兜底)
},
monitor: {
info: noop,
warn: noop,
error: noop // 监控系统错误上报
},
analytics: {
track: noop // 埋点上报
}
});
/**
* 处理请求状态并执行对应逻辑。
* - 对已知状态执行一致的 UI、监控与埋点处理
* - 对未知状态进行监控记录与埋点,并回退到空状态占位
*
* 返回值:最终展示的 UI 状态('idle' | 'loading' | 'content' | 'error' | 'timeout' | 'empty')
*
* @param {string} requestStatus - 当前请求状态
* @param {object} deps - 依赖注入(UI 渲染、监控、埋点)
* @param {object} deps.ui
* @param {function} deps.ui.showIdle
* @param {function} deps.ui.showLoading
* @param {function} deps.ui.showContent
* @param {function} deps.ui.showError
* @param {function} deps.ui.showTimeout
* @param {function} deps.ui.showEmpty
* @param {object} deps.monitor
* @param {function} deps.monitor.info
* @param {function} deps.monitor.warn
* @param {function} deps.monitor.error
* @param {object} deps.analytics
* @param {function} deps.analytics.track
* @returns {'idle'|'loading'|'content'|'error'|'timeout'|'empty'}
*/
function handleRequestStatus(requestStatus, deps = {}) {
const ui = deps.ui || defaultDeps.ui;
const monitor = deps.monitor || defaultDeps.monitor;
const analytics = deps.analytics || defaultDeps.analytics;
// 规范化输入:仅当为字符串时进行修剪和小写转换
const normalized = (typeof requestStatus === 'string')
? requestStatus.trim().toLowerCase()
: null;
// 默认兜底 UI 状态
let finalUiState = 'empty';
switch (normalized) {
case RequestStatus.IDLE:
// 空闲/初始状态:渲染初始界面
ui.showIdle();
analytics.track('request_idle');
finalUiState = 'idle';
break;
case RequestStatus.LOADING:
// 加载中:展示加载动画/骨架屏
ui.showLoading();
analytics.track('request_loading');
finalUiState = 'loading';
break;
case RequestStatus.SUCCESS:
// 成功:展示内容区域
ui.showContent();
analytics.track('request_success');
finalUiState = 'content';
break;
case RequestStatus.ERROR:
// 失败:展示错误信息,可携带重试操作
ui.showError({ retry: true });
monitor.error('REQUEST_ERROR', { status: normalized });
analytics.track('request_error');
finalUiState = 'error';
break;
case RequestStatus.TIMEOUT:
// 超时:展示超时提示与重试
ui.showTimeout({ retry: true });
monitor.warn('REQUEST_TIMEOUT', { status: normalized });
analytics.track('request_timeout');
finalUiState = 'timeout';
break;
default:
// 未知状态:记录监控与埋点,回退为空状态占位
monitor.error('REQUEST_STATUS_UNKNOWN', { received: requestStatus });
analytics.track('request_status_unknown', { received: String(requestStatus) });
ui.showEmpty();
finalUiState = 'empty';
break;
}
return finalUiState;
}
// 可选:导出函数与常量,方便复用(在模块系统中使用时开启)
// export { handleRequestStatus, RequestStatus };
使用示例
'use strict';
// 伪实现:替换为项目内真实实现
const ui = {
showIdle: () => console.log('[UI] idle'),
showLoading: () => console.log('[UI] loading...'),
showContent: () => console.log('[UI] content shown'),
showError: ({ retry }) => console.log(`[UI] error${retry ? ' (with retry)' : ''}`),
showTimeout: ({ retry }) => console.log(`[UI] timeout${retry ? ' (with retry)' : ''}`),
showEmpty: () => console.log('[UI] empty placeholder')
};
const monitor = {
info: (msg, data) => console.log('[MONITOR][INFO]', msg, data || ''),
warn: (msg, data) => console.warn('[MONITOR][WARN]', msg, data || ''),
error: (msg, data) => console.error('[MONITOR][ERROR]', msg, data || '')
};
const analytics = {
track: (event, data) => console.log('[ANALYTICS]', event, data || '')
};
// 期望输出示例
handleRequestStatus('idle', { ui, monitor, analytics }); // [UI] idle
handleRequestStatus('loading', { ui, monitor, analytics }); // [UI] loading...
handleRequestStatus('success', { ui, monitor, analytics }); // [UI] content shown
handleRequestStatus('error', { ui, monitor, analytics }); // [UI] error (with retry) + monitor error
handleRequestStatus('timeout', { ui, monitor, analytics }); // [UI] timeout (with retry) + monitor warn
// 未知状态 -> 监控与埋点,并回退为空状态占位
handleRequestStatus('abort', { ui, monitor, analytics }); // [UI] empty placeholder + monitor error + analytics unknown
handleRequestStatus(null, { ui, monitor, analytics }); // [UI] empty placeholder + monitor error + analytics unknown
注意事项
- 使用严格模式('use strict')保证更严格的语法与运行时检查。
- 仅对字符串类型状态做标准化(trim + toLowerCase);非字符串直接进入 default 兜底。
- 每个 case 都包含 break,避免 case 穿透;严禁使用 eval 等不安全方法。
- 默认分支务必保留:做监控记录与埋点,并回退为空状态占位,保障未知状态的可观测性与安全降级。
- 将 UI、监控与埋点以依赖注入方式传入,便于测试与替换真实实现;生产环境请替换默认 noop 实现。
- 如需扩展状态,请同步更新 RequestStatus 常量与对应分支,保持单一来源的真相。
代码说明
- 功能:根据用户角色 userRole 进行权限分支处理,分别处理 guest、member、editor、admin 四种角色。对未知或异常角色进行降级(guest)、跳转登录页并提示联系管理员。
- 使用场景:页面初始化时的访问控制、路由守卫、接口调用前的权限校验等。
- 设计要点:
1) 统一将输入规范化为小写字符串,避免大小写和空白带来的误判。
2) 用显式 break 防止 case 穿透。
3) default 分支执行安全降级与跳转,确保最小权限原则。
4) 抽离跳转与提示逻辑,便于维护与测试。
'use strict';
/**
* 访问控制:根据 userRole 返回权限配置,并在异常角色时执行降级与跳转。
* - 支持的角色:guest | member | editor | admin
* - 默认处理:降级为 guest,跳转登录页,并提示联系管理员
*/
/** 登录地址(可按需调整为实际登录路由) */
const LOGIN_URL = '/login';
/**
* 将用户提示写入会话并跳转到登录页(使用 replace 防止回退到受限页)
* @param {string} reason - 跳转原因标识,便于登录页显示针对性信息
* @param {string} message - 给用户的提示文案
*/
function redirectToLogin(reason, message) {
try {
if (typeof window !== 'undefined' && window.sessionStorage && message) {
sessionStorage.setItem('auth_message', String(message));
}
if (typeof window !== 'undefined' && window.location) {
const url = new URL(LOGIN_URL, window.location.origin);
if (reason) url.searchParams.set('reason', String(reason));
window.location.replace(String(url));
}
} catch (err) {
// 记录但不阻断主流程(例如 URL/Storage 在部分环境不可用)
// 在生产环境可接入日志上报
console.error('Failed to redirect to login:', err);
}
}
/**
* 简单用户提示(在浏览器中使用 alert,非浏览器环境降级为 console.warn)
* @param {string} msg
*/
function notifyUser(msg) {
if (!msg) return;
if (typeof window !== 'undefined' && typeof window.alert === 'function') {
window.alert(msg);
} else {
// SSR 或非浏览器环境
console.warn(msg);
}
}
/**
* 根据用户角色计算权限并执行必要的分支处理
* @param {*} userRole - 外部传入的用户角色(将被安全转换为字符串)
* @returns {{
* role: 'guest'|'member'|'editor'|'admin',
* permissions: { read: boolean, write: boolean, moderate: boolean, admin: boolean }
* }}
*/
function handleUserAccess(userRole) {
// 1) 规范化输入,确保 switch 比较稳定可靠
const normalized = String(userRole ?? '').trim().toLowerCase();
// 2) 默认采用最小权限(guest),即使后续分支未命中也确保安全
let access = {
role: 'guest',
permissions: { read: true, write: false, moderate: false, admin: false }
};
// 3) 明确的分支逻辑,禁止 case 穿透(每个分支都包含 break)
switch (normalized) {
case 'guest': {
access = {
role: 'guest',
permissions: { read: true, write: false, moderate: false, admin: false }
};
break;
}
case 'member': {
access = {
role: 'member',
permissions: { read: true, write: true, moderate: false, admin: false }
};
break;
}
case 'editor': {
access = {
role: 'editor',
permissions: { read: true, write: true, moderate: true, admin: false }
};
break;
}
case 'admin': {
access = {
role: 'admin',
permissions: { read: true, write: true, moderate: true, admin: true }
};
break;
}
default: {
// 4) 默认处理:降级到 guest,跳转到登录页并提示联系管理员
access = {
role: 'guest',
permissions: { read: true, write: false, moderate: false, admin: false }
};
// 通过会话与 URL 参数向登录页传递原因,前端可在登录页读取并展示
notifyUser('当前账号权限异常,已降级为访客。请联系管理员。');
redirectToLogin('role_invalid', '账号权限异常,请联系管理员处理后重新登录。');
break;
}
}
return access;
}
// 可选:导出函数(在模块化环境中使用)
// export { handleUserAccess };
使用示例
// 示例1:已登录编辑
const access1 = handleUserAccess('editor');
console.log(access1);
// 预期输出:
// {
// role: 'editor',
// permissions: { read: true, write: true, moderate: true, admin: false }
// }
// 示例2:未知角色(如后端返回异常值)
const access2 = handleUserAccess('power-user');
// 预期行为:
// - 弹窗提示“请联系管理员”
// - 跳转到 /login?reason=role_invalid
// - 返回值(在跳转前)为:
// {
// role: 'guest',
// permissions: { read: true, write: false, moderate: false, admin: false }
// }
注意事项
- 避免省略 break:所有 case 均包含 break,防止逻辑穿透。
- 输入规范化:统一使用 String(...).trim().toLowerCase(),提升鲁棒性。
- 默认最小权限:任何未知/异常角色都将降级为 guest,避免越权风险。
- 跳转方式:使用 window.location.replace,阻止用户通过“后退”回到受限页面。
- 提示传递:通过 sessionStorage 与 URL 参数向登录页传达提示与原因,登录页可读取并展示。
- 环境兼容:在非浏览器环境(如 SSR)时,alert/redirect 将降级处理,不会抛错;可根据实际需求定制行为。
- 安全性:未使用 eval 等不安全方法;在 default 分支处理异常输入,建议同时在服务端做权限校验与路由保护。
// 代码说明
// 本段代码用于根据订单事件(orderEvent)进行状态分支处理,涵盖 created、paid、shipped、delivered、cancelled、refunded 六种业务事件。
// 采用严格模式与标准的 switch-case 结构,确保无 case 穿透、逻辑清晰、可维护。
// 特点:
// - 事件名大小写与空白容错(统一小写匹配)
// - 幂等处理(重复事件不重复更新状态)
// - 完整的默认处理(记录异常事件、保持原状态、通知运营介入)
// - 可插拔的服务依赖(状态更新、时间线记录、消息通知、日志、运营告警)
'use strict';
/**
* 处理订单事件的统一入口
* @param {string} orderEvent - 订单事件:created|paid|shipped|delivered|cancelled|refunded
* @param {Object} ctx - 上下文
* @param {string|number} ctx.orderId - 订单ID
* @param {string} ctx.currentStatus - 当前订单状态
* @param {Object} ctx.services - 外部服务集合
* @param {Function} ctx.services.updateStatus - (orderId, nextStatus) => Promise<void>
* @param {Function} ctx.services.addTimeline - (orderId, message) => Promise<void>
* @param {Function} ctx.services.notifyUser - (orderId, type, payload) => Promise<void>
* @param {Function} ctx.services.notifyOps - (payload) => Promise<void>
* @param {Object} ctx.services.logger - { info:Function, warn:Function, error:Function }
* @returns {Promise<{handled:boolean, orderId:string|number, prevStatus:string, nextStatus:string, event:string}>}
*/
async function handleOrderEvent(orderEvent, ctx) {
// 基本校验
if (!ctx || typeof ctx !== 'object') {
throw new TypeError('ctx is required and must be an object');
}
const { orderId, currentStatus, services } = ctx;
if (!orderId) throw new TypeError('ctx.orderId is required');
if (!services || typeof services !== 'object') {
throw new TypeError('ctx.services is required');
}
// 要求的服务依赖检查
const requiredFns = ['updateStatus', 'addTimeline', 'notifyUser', 'notifyOps'];
requiredFns.forEach(fnName => {
if (typeof services[fnName] !== 'function') {
throw new TypeError(`services.${fnName} must be a function`);
}
});
const logger = services.logger && typeof services.logger === 'object'
? services.logger
: { info: () => {}, warn: () => {}, error: () => {} };
// 归一化事件名
const event = typeof orderEvent === 'string' ? orderEvent.trim().toLowerCase() : '';
if (!event) {
logger.warn(`[Order:${orderId}] Empty or invalid orderEvent: ${String(orderEvent)}`);
}
// 使用局部可变状态,便于在一次处理内多处读取
let status = typeof currentStatus === 'string' ? currentStatus : '';
// 幂等安全的状态流转+通知封装
async function transition(nextStatus, timelineMsg, userNotify) {
if (status !== nextStatus) {
await services.updateStatus(orderId, nextStatus);
status = nextStatus;
logger.info(`[Order:${orderId}] 状态更新: ${String(currentStatus)} -> ${nextStatus}`);
} else {
logger.info(`[Order:${orderId}] 状态已为 ${nextStatus},忽略重复事件`);
}
if (timelineMsg) {
await services.addTimeline(orderId, timelineMsg);
}
if (userNotify && userNotify.type) {
await services.notifyUser(orderId, userNotify.type, userNotify.payload || { status: nextStatus });
}
}
try {
switch (event) {
case 'created':
// 订单创建:补充时间线并给用户发送确认
await transition(
'created',
'订单已创建',
{ type: 'order_created', payload: { createdAt: Date.now() } }
);
break;
case 'paid':
// 订单支付成功:更新状态、记录支付时间、通知用户
await transition(
'paid',
'订单支付成功',
{ type: 'payment_confirmed', payload: { paidAt: Date.now() } }
);
break;
case 'shipped':
// 订单已发货:更新状态并提醒用户关注物流
await transition(
'shipped',
'订单已发货',
{ type: 'order_shipped', payload: { shippedAt: Date.now() } }
);
break;
case 'delivered':
// 订单已签收:更新状态并可以引导用户评价
await transition(
'delivered',
'订单已送达',
{ type: 'order_delivered', payload: { deliveredAt: Date.now() } }
);
break;
case 'cancelled':
// 订单取消:更新状态并说明取消原因(如有)
await transition(
'cancelled',
'订单已取消',
{ type: 'order_cancelled', payload: { cancelledAt: Date.now() } }
);
break;
case 'refunded':
// 订单退款:更新状态并告知退款进度
await transition(
'refunded',
'订单已退款',
{ type: 'order_refunded', payload: { refundedAt: Date.now() } }
);
break;
default:
// 默认处理:记录异常事件,保持原状态并通知运营介入
logger.warn(`[Order:${orderId}] 未识别的事件: ${String(orderEvent)},保持原状态: ${String(currentStatus)}`);
await services.addTimeline(orderId, `收到异常事件: ${String(orderEvent)},已通知运营介入`);
await services.notifyOps({
severity: 'medium',
title: '异常订单事件',
details: {
orderId,
eventReceived: orderEvent,
normalizedEvent: event,
currentStatus: currentStatus || '',
occurredAt: Date.now()
}
});
break;
}
return {
handled: ['created', 'paid', 'shipped', 'delivered', 'cancelled', 'refunded'].includes(event),
orderId,
prevStatus: currentStatus || '',
nextStatus: status || '',
event
};
} catch (err) {
// 错误处理:记录并上报运营
logger.error(`[Order:${orderId}] 处理事件(${String(orderEvent)})失败: ${err && err.message}`);
try {
await services.notifyOps({
severity: 'high',
title: '订单事件处理失败',
details: {
orderId,
eventReceived: orderEvent,
currentStatus: currentStatus || '',
error: err && err.message,
occurredAt: Date.now()
}
});
} catch (_) {
// 避免二次异常影响主流程
}
// 将错误继续抛出,方便上层感知与回滚
throw err;
}
}
// 使用示例
(async () => {
// 模拟服务
const mockServices = {
updateStatus: async (orderId, next) => console.log(`[updateStatus] ${orderId} -> ${next}`),
addTimeline: async (orderId, msg) => console.log(`[addTimeline] ${orderId} | ${msg}`),
notifyUser: async (orderId, type, payload) => console.log(`[notifyUser] ${orderId} | ${type}`, payload),
notifyOps: async (payload) => console.log(`[notifyOps]`, payload),
logger: {
info: console.log,
warn: console.warn,
error: console.error
}
};
// 1) 正常事件
const res1 = await handleOrderEvent('paid', {
orderId: 'ORD-1001',
currentStatus: 'created',
services: mockServices
});
console.log('Result1:', res1);
// 预期输出(示例):
// [updateStatus] ORD-1001 -> paid
// [addTimeline] ORD-1001 | 订单支付成功
// [notifyUser] ORD-1001 | payment_confirmed { paidAt: 1690000000000 }
// Result1: { handled: true, orderId: 'ORD-1001', prevStatus: 'created', nextStatus: 'paid', event: 'paid' }
// 2) 重复事件(幂等)
const res2 = await handleOrderEvent('PAID', {
orderId: 'ORD-1001',
currentStatus: 'paid',
services: mockServices
});
console.log('Result2:', res2);
// 预期输出(示例):
// 状态已为 paid,忽略重复事件
// [addTimeline] ORD-1001 | 订单支付成功
// [notifyUser] ORD-1001 | payment_confirmed {...}
// Result2: { handled: true, orderId: 'ORD-1001', prevStatus: 'paid', nextStatus: 'paid', event: 'paid' }
// 3) 异常事件(触发默认分支)
const res3 = await handleOrderEvent('unknown_event', {
orderId: 'ORD-1002',
currentStatus: 'created',
services: mockServices
});
console.log('Result3:', res3);
// 预期输出(示例):
// 未识别的事件: unknown_event,保持原状态...
// [addTimeline] ORD-1002 | 收到异常事件: unknown_event,已通知运营介入
// [notifyOps] { severity: 'medium', ... }
// Result3: { handled: false, orderId: 'ORD-1002', prevStatus: 'created', nextStatus: 'created', event: 'unknown_event' }
})();
// 注意事项
// - 严格模式下运行,避免隐式全局变量与静默错误。
// - switch-case 不允许省略 break,且无 case 穿透;本实现每个分支均以 break 结束。
// - 事件名在进入分支前做了归一化处理(trim + toLowerCase),提高容错性。
// - 采用幂等更新:仅当目标状态与当前状态不一致时才触发 updateStatus,避免重复写入。
// - 默认分支会记录异常事件并通知运营,但不会修改订单状态,满足“记录异常事件,保持原状态并通知运营介入”的要求。
// - 外部 services 为可插拔依赖,生产环境中请确保其实现稳定、具备重试与超时控制。
// - 如需增加新事件,按照既有模式在 switch 中新增 case,并复用 transition 帮助函数即可。
快速构建交互事件与状态切换的条件分支,一次输入变量与规则,即可生成可读可维护的代码,减少手误与遗漏,缩短迭代周期。
为路由分发、消息处理、订单流转等后端逻辑快速产出统一分支代码,带默认与错误兜底,减少线上故障,便于排查问题。
以统一模板约束风格与注释规范,批量生成标准化分支,降低重复性问题,提升评审效率与团队协作质量。
将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。
把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。
在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。
半价获取高级提示词-优惠即将到期