Node.js promisify:回调给出两个结果,await 为什么只拿到第一个 旧接口通过回调同时返回内容与附加信息,改成 await 后只剩内容,附加信息没有报错却消失了。首先检查默认适配器如何定义成功结果。一个 Promise 只有一个兑现值,旧回调里的多个成功参数需要明确包装,不能期待转换... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
JavaScript 后行断言:同样的贪婪分组,为什么在左边少拿了一个字符 把两个捕获组移进后行断言,表达式仍然匹配成功,但第一个组从 ab 变成 a,第二个组从 c 变成 bc。不是贪婪规则失效了,而是断言从当前位置向左检查,右侧的组先获得匹配机会。判断分组结果时,必须把方向一起带进推演。... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Node.js error 事件:监控已经记录了异常,程序为什么仍然会抛错 给事件对象加上监控回调后,日志已经记下错误,程序却仍然抛出异常。原因可能是注册了 errorMonitor,却没有真正的 error 监听器。监控负责观察错误事件,并不代表应用已经接手处理;两者的职责不能靠“日志里看... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
SQLite changes 与 total_changes:插入两行,触发器多写的两行算在哪里 一次插入两条主记录,触发器又为每条写一条日志。应用拿 changes 得到二,另一个统计却显示四,看起来像数据库多执行了插入。其实两个计数器的范围不同:一个看最近完成的主语句直接影响多少行,另一个累计这个连接执行过的... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
SQLite ORDER BY 同名别名:原列是数字,排序为什么先出现 10 再出现 2 报表把数值统一显示为两位小数,顺手让格式化结果沿用原列名称 n,再写 ORDER BY n。表里明明存着数字,输出却把 10.00 排在 2.00 前面。应先看排序名称最终指向哪个表达式:在这里,它指向同名的输出别名... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
SQLite HAVING 不写 GROUP BY:三条输入为什么最后只剩一行或零行 想在待办数量达到门槛时返回一个汇总,查询写了 count 和 HAVING,却没有 GROUP BY。它并不会为每条任务分别做一次门槛判断:这是整体聚合,所有经过筛选的输入共同形成一份统计,条件决定这份统计是否进入结... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
SQLite 延迟外键:COMMIT 已经报错,事务为什么还没有结束 导入关联数据时,子记录先到,父记录稍后才写入。延迟外键允许这类暂时不完整的状态存在于事务内部,但提交时仍必须满足约束。容易漏掉的是恢复动作:COMMIT 因延迟外键失败之后,事务可能仍然开着,已经执行的插入也还在其中... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
用 AI 设计双属性图例:地点做什么,与现在能不能用分开标 一张活动地图既要说明地点做什么,又要说明现在是否开放。若蓝色一会儿代表阅读区,一会儿代表可以进入,读者很难判断图上某个蓝标究竟在说什么。可以让AI先写出两项属性各由哪个标记负责,再生成设计候选。 yunqueblog/ AI分享/ 2026-10-02/ 3 阅读
让 AI 比较短篇标题:读到正文以前,哪些情节已经被说出来 给短篇起标题时,AI可能同时给出一个神秘标题和一个几乎复述结尾的标题,然后只按好听程度排序。更有用的比较是:读者还没有开始读,就已被告知哪些事情,可能期待什么,正文能不能接住这些期待。 yunqueblog/ AI分享/ 2026-10-02/ 3 阅读
用 AI 梳理段落衔接:上一句留下的东西,下一句怎样接住 一个段落没有错字,人物和物件也很明确,读起来却像几张卡片碰巧放在一起。此时让AI多加“因此”“此外”未必有用。可以试一种具体编辑练习:查看前一句刚交出的对象或问题,后一句是否从它继续往前走。 yunqueblog/ AI分享/ 2026-10-02/ 3 阅读