rxjs - RxJs:如何在 finalize 中返回结果
问题描述
我正在尝试返回结果finalize
。这是我的代码:
const source = of(...packets);
return source.pipe(
concatMap(val =>
writePacket(peripheralId, serviceUUID, characteristicUUID, val),
),
map(res => {
debugLog('in map ******');
return {type: ResponseType.writeComplete};
}),
finalize(() => {
debugLog('in finalize');
return {type: ResponseType.writeComplete};
}),
catchError(err => {
debugLog('in catch error', err);
throwError(err);
}),
);
结果是在 中返回map
,但不是在 finalize 中。如何从 finalize 中获得结果?
非常感谢!
解决方案
的finalize
回调在拆卸阶段被调用,例如当订阅被取消订阅时。这可能是complete
/error
通知的结果。回调的返回值不会被考虑在内。
您可以改为使用endWith
运算符。所以你可以像这样替换finalize
:
/* ... */
endWith({type: ResponseType.writeComplete})
/* ... */
export function endWith<T>(...values: Array<T | SchedulerLike>): MonoTypeOperatorFunction<T> {
return (source: Observable<T>) => concat(source, of(...values)) as Observable<T>;
}
endWith
可以接受多个参数,
推荐阅读
- javascript - 请启用 JavaScript 以继续使用此应用程序。- ng服务
- c# - 如何使 INotifyPropertyChanged 工作?
- webrtc - 如何在基于 Chromium 的功能测试中使用导航媒体设备?(TestCafe)
- php - 将 PHP soap 用于 DHL express SOAP 服务器时是否可能发送重复的密钥
- html - 一个网站的移动版和桌面版导航栏不同
- verilog - Verilog函数返回错误值
- c++ - 在 PoDoFo(Linux) 中使用 C++ 时签名字节范围无效
- ruby-on-rails - Ruby:控制器函数中没有传递参数
- java - 首次序列化后配置 ObjecMapper 空序列化无效
- generics - Dart:在抽象类中覆盖泛型函数时出现类型错误