You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 12:42:41