Javascript 如何仅从这两个观察对象创建一个订阅?
我有一个函数,可以从可读流中读取数据,然后将结果保存在Parse中:Javascript 如何仅从这两个观察对象创建一个订阅?,javascript,rxjs,Javascript,Rxjs,我有一个函数,可以从可读流中读取数据,然后将结果保存在Parse中: const { from } = require('rxjs'); const Observable = require('rxjs').Observable; const jsArr = []; fromStream(fs.createReadStream(req.file.path, 'utf-8').pipe(csv())) .map((data) => data.USERNAME)
const { from } = require('rxjs');
const Observable = require('rxjs').Observable;
const jsArr = [];
fromStream(fs.createReadStream(req.file.path, 'utf-8').pipe(csv()))
.map((data) => data.USERNAME)
.subscribe(
(data) => jsArr.push(data),
(error) => console.log(error),
() => {
const CSVData = Parse.Object.extend('CSVData');
const csv = new CSVData();
csv.set('CSV',jsArr);
from (csv.save())
.subscribe(
() => res.json(serialize({type:'success'})),
(error) => console.log(error)
);
}
);
它工作得非常好,但我想知道是否有一种方法可以更干净地完成它,只使用一个订阅者
有可能吗?我想你可以这样做,但很明显,我还没有测试过
fromStream(fs.createReadStream(req.file.path, 'utf-8').pipe(csv()))
.map((data) => data.USERNAME)
.toArray(),
.concatMap(jsArr => {
const CSVData = Parse.Object.extend('CSVData');
const csv = new CSVData();
csv.set('CSV',jsArr);
return from(csv.save());
})
.subscribe(
() => res.json(serialize({type:'success'})),
(error) => console.log(error)
)
首先
reduce
并获取要保存的结果,然后保存结果:
fromStream(fs.createReadStream(req.file.path, 'utf-8').pipe(csv()) )
.map((data) => data.USERNAME)
.reduce((acc, curr) => acc.push(curr), [])
.switchMap(resultArray => {
const CSVData = Parse.Object.extend('CSVData');
const csv = new CSVData();
csv.set('CSV',resultArray);
return from (csv.save());
}).subscribe(x =>{})
上述方法可能更简单,并且遵循良好的函数式编程概念,这里您不需要使用属性jsArr