Obsidian Templater手动日期脚本调用失败及日志查看求助
解决Obsidian Templater手动日期输入脚本的异步问题及日志查看方法
一、查看Obsidian 1.3.5控制台日志
- Windows/Linux:按下
Ctrl + Shift + I打开开发者工具,切换到 Console 标签页查看具体报错信息 - Mac:按下
Cmd + Option + I打开开发者工具,在 Console 标签页查看日志
二、解决脚本异步执行导致的日期未存储问题
1. 合并脚本逻辑(最优方案)
将日期输入与格式化逻辑合并到单个脚本,消除跨脚本的异步依赖。创建 manualDateHandler.js:
module.exports = async (tp) => { // 弹出输入框获取日期 const inputDate = await tp.system.prompt("请输入日期(格式建议:YYYY-MM-DD)"); if (!inputDate) return; // 格式化日期(示例为YYYY-MM-DD,可按需调整) try { const date = new Date(inputDate); const formattedDate = date.toISOString().split('T')[0]; // 存入tp.store(可选,供其他场景调用) await tp.store.set("insertedDate", formattedDate); return formattedDate; } catch (err) { tp.system.alert("日期格式错误,请重新输入"); return ""; } };
模板中调用该脚本即可:<% tp.user.manualDateHandler(tp) %>
2. 强制脚本顺序执行(保留双脚本结构)
若必须分开两个脚本,需通过异步等待确保存储完成后再读取:
- 模板中使用
<%* %>包裹异步代码:
<%* // 先执行输入存储脚本 await tp.user.insertDate(tp); // 再执行读取格式化脚本 const result = await tp.user.manualDate(tp); tR += result; %>
- 修改
insertDate.js为异步函数:
module.exports = async (tp) => { const inputDate = await tp.system.prompt("请输入日期"); if (inputDate) { await tp.store.set("insertedDate", inputDate); } };
- 修改
manualDate.js为异步函数:
module.exports = async (tp) => { const storedDate = await tp.store.get("insertedDate"); if (!storedDate) return ""; // 格式化逻辑,示例转为YYYY-MM-DD const date = new Date(storedDate); return date.toISOString().split('T')[0]; };
3. 检查Templater基础设置
- 确认Templater插件已开启 Allow templates to execute user scripts 选项
- 验证脚本文件路径与Templater设置的 User Scripts 文件夹一致
内容的提问来源于stack exchange,提问作者tegowai
相关产品推荐
相关产品推荐

