如何从这两个可观察对象创建一个订阅?

时间:2018-06-28 10:46:39

标签: javascript rxjs

我有一个函数,该函数从可读流中读取数据,然后将结果保存在Parse中:

<p id="par">
JS or JavaScript is a powerful client-side programming language. Using it, we can manipulate the contents of HTML files without reloading the page. JS makes the page more interactive for the users.
</p>

它确实工作得很好,但是我想知道是否有一种方法可以只使用一个订户来以更清洁的方式进行操作。

有可能吗?

2 个答案:

答案 0 :(得分:1)

我想您可以这样做,但是出于明显的原因,我尚未对其进行测试。

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)
  )

答案 1 :(得分:0)

首先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