Angular中subscribe().add()传入非Subscription类型参数的疑问
Angular中Subscription.add()的参数与Promise.resolve处理问题
代码示例
const numbers: Observable<number> = interval(5000); const takeFourNumbers = numbers.pipe(take(4)); const promise$ = new Promise<void>(resolve => { // 尝试在应用启动时刷新令牌以自动认证 takeFourNumbers.subscribe() .add(resolve); }).then((result) => { console.log("My result is ", result); });
问题解答
- add()方法的参数不一定是Subscription类型
RxJS里Subscription.add()接受的是TeardownLogic类型,该类型包含三种合法输入:
Subscription实例- 无参函数
- 带有
unsubscribe()方法的对象
所以传入Promise的resolve(本质是个函数)是完全合规的用法。
- 框架会直接调用传入的resolve函数
当订阅终止时(比如示例中take(4)完成4次数据发射后,订阅自动结束),Subscription会依次执行所有通过add()添加的清理逻辑。如果传入的是函数(比如这里的resolve),框架会直接调用这个函数,而非去查找unsubscribe()方法。
在你的代码里,订阅完成后resolve被触发,Promise变为resolved状态,后续的.then()回调就会执行,打印出对应的日志。
内容的提问来源于stack exchange,提问作者janci
相关产品推荐
相关产品推荐

