Subscription的add方法传入Promise resolve回调的作用解析
Subscription.add()传入Promise.resolve的作用解析
这段代码是Angular应用初始化器的逻辑,核心是保证应用初始化流程不会因token刷新操作卡住,下面拆解具体含义:
Subscription.add()的本质:它不仅能添加其他订阅,还可以传入一个无参函数——当主订阅(这里是
refreshToken()的订阅)完成、出错或者被取消时,这个函数都会被自动执行。结合Promise的逻辑:
初始化器要求返回一个Promise,只有当这个Promise被resolve后,Angular才会继续启动应用。把resolve函数传给add(),就确保了不管token刷新操作是成功、失败还是中途终止,resolve都会被调用,初始化流程不会卡壳。为啥不直接在subscribe回调里调用resolve:
如果只在subscribe的next或error回调里写resolve(),万一Observable中途被退订(虽然初始化阶段概率低,但逻辑上存在可能),resolve就不会触发,应用会一直停在初始化状态。用add()能覆盖所有订阅结束的场景,保证初始化流程100%能走完。
内容的提问来源于stack exchange,提问作者janci
相关产品推荐
相关产品推荐

