Node.js 异步事件监听报错:emit已经返回true,失败怎样进入error处理器 给事件监听器加上async以后,内部的失败变成了Promise拒绝。调用方看见emit返回true,很容易以为任务已经成功,实际上异步部分可能才刚开始。captureRejections能帮忙把这类拒绝送到明确的错误... yunqueblog/ 技术教程/ 2026-10-03/ 2 阅读
Promise.any 等的是首次成功:先失败的任务,为什么没有结束整组等待 先结束与先成功,是两种等待条件同时读取几个等价数据源时,最快返回的请求可能恰好失败。Promise.race 采用第一个确定结果的任务,无论它成功还是失败;Promise.any 则等待第一个成功兑现的任务,前面的拒... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
Node.js 连续等待事件:第一个 await 已返回,为什么第二个事件却等不到 一个任务先发 ready,再发 done。消费端顺序写两次 await once,看起来严格遵守事件顺序,却在第二次等待处停住。发布端的日志明明显示 done 已经发射,问题是消费端直到第一个 await 恢复后才注... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
JavaScript thenable 同化:普通对象带 then,为什么 await 会调用它 给旧接口加上 async 包装后,原本应该返回一条记录,却突然返回数字;另一个对象只是读取字段就报错。此时不能只检查它是不是 Promise 实例。JavaScript 的异步结果接纳一种协议:如果对象的 then ... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
JavaScript 有界并发任务池:把任务延后启动,才能真正限制同时运行的数量 批量生成缩略信息时,直接把一百次请求交给 Promise.all,往往会在很短时间内同时启动。聚合结果的方法本身不会替你控制连接数。真正需要限制的是“任务开始到结束”这段区间里,有多少项工作处于活跃状态。解决办法是先... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Promise.finally 清理流程:普通返回值会透传,清理失败却可能覆盖原错误 请求结束后关闭加载提示,常常适合放进 Promise.finally,因为成功和失败都需要执行同一段收尾。但“无论结果如何都清理”并不等于“清理永远不会改变结果”。如果清理函数自己抛出异常,调用方最后看到的可能已经不... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
JavaScript 微任务顺序:Promise 已经完成,then 为什么还要等一会儿 状态完成与回调执行不是同一个时刻读取缓存时,我们可能已经拿到结果,于是返回一个立即完成的 Promise。调用方给它登记 then 回调后,却发现下一行同步代码先执行。这种行为会影响初始化标志、日志顺序和事件通知,尤... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Promise.allSettled 实战:部分任务失败后,怎样保留结果与对应关系 商品页同时读取用户资料、库存和推荐列表时,某个辅助模块失败,页面仍可能展示其他内容。此时需要一份完整清单:哪些成功,哪些失败,每项属于谁。只在最外层捕获一次异常,通常无法直接得到这份清单。先明确页面允许哪些部分降级,... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读