angular - RXJS 如何延迟每个 observable(http 请求)并合并所有请求输出
问题描述
我在一个 observable 中设置 http 请求之间的间隔时遇到问题。事情是 - 我想在每个 http 请求之间有延迟,等待所有请求完成,并对来自所有请求的组合数据执行操作。当然文档数组的长度是未知的。
示例代码:
const documents = [
{
'documentId': 1,
'documentName': 'DocName1'
},
{
'documentId': 2,
'documentName': 'DocName2'
},
];
function saveDocumentService(document) {
document['someAnotherData'] = '123';
return of(document); // in real world http.post()
}
const documentsToSave$ = zip(
documents,
interval(200),
document => {
document['someDataToBeInserted'] = {'data': 123};
return saveDocumentService(document);
}
);
const sub = forkJoin(documentsToSave$).subscribe(documents => {
console.log('All documents uploaded', documents); // array of responses
});
使用这种方法,仅输出最后一个值。
谢谢。
解决方案
您可以使用merge
计时器并忽略所述计时器的输出:
import { of, from, timer } from 'rxjs'
import { concatMap, merge, ignoreElements, tap, toArray } from 'rxjs/operators'
const documents = [
{
'documentId': 1,
'documentName': 'DocName1'
},
{
'documentId': 2,
'documentName': 'DocName2'
},
];
function saveDocumentService(document) {
document['someAnotherData'] = '123';
return of(document)
}
from(documents)
.pipe(
concatMap(url => saveDocumentService(url).pipe(
tap(res => console.log('Saved document...')),
merge(timer(1000).pipe(ignoreElements()))
)),
toArray(),
)
.subscribe(documents => {
console.log('Sub:', documents)
})
推荐阅读
- typescript - Typescript:为什么部分接口不接受附加字段?
- javascript - 如何从客户端的 Firebase 应用向我的应用引擎发出 http 请求?
- python - 从 Python 中的循环类绘图(带有深度学习示例)
- html - Unicode 中的软 Hypen 不呈现
- javascript - 如何使用 jQuery 在单击的元素中选择图像
- c++ - Simulink - 使用 .Mat 作为外部输入变量来自动编码 c 函数
- xamarin - 当使用 MasterDetailPage 退出并再次进入应用程序时,它会在一定次数后崩溃
- jquery - 用于控制 Bing 地图上的停靠点的菜单
- ios - CoreData 错误:无效的生成令牌:此持久存储协调器没有任何引用的存储
- modulus - 如何用分数做模数