NRa*_*Raf 5 javascript rxjs rxjs5
我猜这应该有点容易实现,但我遇到了麻烦(从概念上讲,我猜)找出如何解决它.
我所拥有的是一个返回JSON对象数组的API.我需要逐步浏览这些对象,并为每个对象进行另一个AJAX调用.问题是处理每个AJAX调用的系统一次只能处理两个活动调用(因为它是一个CPU密集型任务,可以挂钩到桌面应用程序中).
我想知道如何使用RxJS(使用版本5或4)来实现这一目标?
编辑:此外,是否可以同时运行一系列步骤.即
Downloading File: 1
Processing File: 1
Converting File: 1
Uploading File: 1
Downloading File: 2
Processing File: 2
Converting File: 2
Uploading File: 2
Downloading File: 3
Processing File: 3
Converting File: 3
Uploading File: 3
我尝试过这样的事情:
Rx.Observable.fromPromise(start())
.concatMap(arr => Rx.Observable.from(arr))
.concatMap(x => downloadFile(x))
.concatMap((entry) => processFile(entry))
.concatMap((entry) => convertFile(entry))
.concatMap((entry) => UploadFile(entry))
.subscribe(
data => console.log('data', new Date().getTime(), data),
error => logger.warn('err', error),
complete => logger.info('complete')
);
Run Code Online (Sandbox Code Playgroud)
然而,这似乎不起作用.例如,downloadFile不等待processFile,convertFile和uploadFile全部完成,而是下一个将在前一个完成后再次运行.
如果您希望请求的顺序完全像这样,这里有两种方法
Downloading File: 1
Processing File: 1
Converting File: 1
Uploading File: 1
Downloading File: 2
Processing File: 2
...
Run Code Online (Sandbox Code Playgroud)
您需要解决单个 concatMap 方法中的所有承诺,如下所示
Rx.Observable.fromPromise(getJSONOfAjaxRequests())
.flatMap(function(x) { return x;})
.concatMap(function(item) {
return downloadFile(item)
.then(processFile)
.then(convertFile);
})
.subscribe(function(data) {
console.log(data);
});
Run Code Online (Sandbox Code Playgroud)
请参阅此处的工作 plunkr:https://plnkr.co/edit/iugdlC2PpW3NeNF2yLzS ?p=preview 这样,只有在前一个 ajax 调用完成后才会发送新的 ajax 调用。
另一种方法是允许文件并行发送请求,但“下载、处理、转换、上传”操作将按顺序进行。为此,你可以通过以下方式让它工作
Rx.Observable.fromPromise(getJSONOfAjaxRequests())
.flatMap(function(x) { return x;})
.merge(2) // in case maximum concurrency required is 2
.concatMap(function(item) {
return downloadFile(item);
})
.concatMap(function(item) {
return processFile(item);
})
.concatMap(function(item) {
return convertFile(item)
})
.subscribe(function(data) {
//console.log(data);
});
Run Code Online (Sandbox Code Playgroud)
请参阅此处的 plunkr:https://plnkr.co/edit/mkDj6Q7lt72jZKQk8r0p ?p=preview
| 归档时间: |
|
| 查看次数: |
1733 次 |
| 最近记录: |