💡
原文英文,约400词,阅读约需2分钟。
📝
内容提要
JavaScript的Promise不是一个单子。它会将Promise<Promise<T>>当作Promise<T>处理。这可能会导致意想不到的问题。解决方法是改变pop()的签名,使用Maybe<T>来代替Promise<T | undefined>。这样可以避免T包含Promise<undefined>的问题。
🎯
关键要点
- JavaScript的Promise不是一个单子,Promise<Promise<T>>会被当作Promise<T>处理。
- 这可能导致意想不到的问题,特别是在使用Channel<T>类时。
- Channel<T>的pop()方法返回Promise<T | undefined>,但如果T包含undefined会出现问题。
- 更隐蔽的问题是T也不能包含Promise<undefined>,否则会导致类型混淆。
- TypeScript不会警告这种情况,可能导致开发者不易察觉。
- 解决方法是将pop()的签名改为Promise<Maybe<T>>,使用Maybe<T>代替Promise<T | undefined>。
- 这样可以避免Channel<undefined>和Channel<Promise<undefined>>的问题,保持结构的完整性。
🏷️
标签
➡️