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 仓库可供进一步探索和使用。