Hasty Briefsbeta

双语

Show HN: LazyPromise = Observable – Signals

2 months ago
  • #JavaScript
  • #Asynchronous
  • #Promise
  • LazyPromise 是一个惰性的、可取消的 Promise 替代方案,支持类型化错误和同步发射。
  • 与 Promise 的主要区别:惰性执行、可取消、类型化错误、同步发射(无微任务队列)。
  • 设计追求简洁,避免 RxJS Observables 的复杂性和误用可能。
  • 避免强制微任务,让开发者完全控制执行顺序。
  • 支持类型化错误,通过类型安全增强错误处理。
  • 创建时可选拆卸函数用于清理(如清除定时器)。
  • 执行仅在订阅时启动,而 Promise 会立即执行。
  • 可取消:若在决议前取消订阅,将调用拆卸函数。
  • 一旦决议或拒绝,会缓存结果供后续订阅者使用。
  • API 镜像 Promise 但采用管道而非链式,含 `map`、`catchRejection` 和 `finalize` 等方法。
  • 工具函数 `eager` 和 `lazy` 可在 LazyPromise 与 Promise 间转换。
  • 包含第三『失败』通道处理非类型化错误,作为类型化错误的补充。
  • 设计上防止静默失败,非法操作会抛出错误。
  • 可通过取消订阅句柄比较检查 LazyPromise 是否同步完成。
  • GitHub 仓库可供进一步探索和使用。