我有一系列请求和4名网络工作者。我希望将响应提供给工作人员,并且一旦工作人员完成另一个响应,依此类推。我不想阻止请求。
我写的代码与1或4名工人之间没有任何区别:
const octrees$ = from(spatialKeys)
.pipe(
concatMap((spatialKey: string) => {
console.log("REQUEST");
return this.sgsApi
.getCellById(
sessionId,
volumetricModelQueryId,
spatialKey
)
.then(resp => resp.arrayBuffer())
.then(datBuffer => ({
datBuffer,
spatialKey
}));
}),
// SINGLE WEB WORKER
// mergeMap(({ spatialKey, datBuffer }) =>
// this.unpackWorkers[0].unpackDat(spatialKey, datBuffer)
// )
bufferCount(4),
switchMap(values => {
console.log("UNPACK");
return values.map(({ datBuffer, spatialKey }, index) =>
this.unpackWorkers[index].unpackDat(
spatialKey,
datBuffer
)
);
}),
combineAll()
)
.subscribe(val => {
const t1 = performance.now();
console.log("COMPLETED at :", (t1 - t0) / 1000, val);
});