angular - 将数组中的值附加到 BehaviorSubject

标签 angular typescript rxjs observable behaviorsubject

我有一个 EvaluateHistoryItem[] 类型的 BehaviourSubject history$。在 uploadFile 方法中,我用逗号分割上传的 .txt 文件,然后将它们推送到 resultSet[]。我想将 resultSet[] 中的值附加到 history$ BehaviorSubject。

我是 RxJS 的新手,发现它很复杂(仍在努力)。我会很感激一些帮助。


我尝试过类似的方法,但它不正确,因为我不想映射,而是附加新值(我认为它应该是 combineLatest 的东西):

 history.map(a => {
                a.saved = this.convertToBool(resultSet[0]);
                a.evaluate = resultSet[1];
                a.result = resultSet[2];
                a.runTimeMs = Number(resultSet[3]);
                a.tags.map(tag => tag.value = resultSet[4]);

            });
 this.history$.next(history);

附言。对不起,如果问题的标题不好。


这是我的代码:

interface EvaluateHistoryItem {
evaluate: string;
error?: string;
result?: string;
runTimeMs?: number;
saved?: boolean;
}

export class EvaluateComponent implements OnInit, AfterViewInit {
   ...  ...  ...
   ...  ...  ...
   public history$ = new BehaviorSubject<EvaluateHistoryItem[]>([]);
   ...  ...  ...
   public uploadFile(element: any) {
       let uploadedFile = document.getElementById('uploadedFile');
       let files: File[] = element.srcElement.files;
       let file: File = files[0];

       let reader = new FileReader();

       let resultSet: string[] = [];

       reader.onloadend = (result) => {
           // replace new lines with commas and then split upon commas but not the ones inside quotes
           let columns: string[] = reader.result.replace(/\n/g, ',').split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);

           for (let i = 0; i < columns.length - 1; i++) {
               resultSet.push(columns[i]);
           }
       };

    let history: EvaluateHistoryItem[] = this.history$.getValue();
    // ... here I need to map values from resultSet
    // ....
    this.history$.next(history);
}  

最佳答案

我在你的问题中看到的关键词是skipbufferCount .

resultSet
  .skip(4) /* first four emissions */
  .bufferCount(4)
  .map(buffer => ({
    save: buffer[0],
    evaluate: buffer[1],
    result: buffer[2], 
    runTimeMs: buffer[3] 
  }))
  .subscribe(console.log);

关于angular - 将数组中的值附加到 BehaviorSubject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43033030/

相关文章:

javascript - 带有 Typescript 的 ES6 箭头函数

typescript - 安装@types/leaflet 后无法访问全局 L 命名空间

typescript - 使用 SolidJS 中的 fetch API 渲染远程数据

angular - 使用 Rxjs umd 包

angular - Ionic 2/Angular 2 中的全局函数

Angular CanDeactivate 不起作用

typescript - RxJS 延迟至少 X 毫秒

angular - 从商店的多个切片获取 NGRX 数据的最佳方法是什么

javascript - 单击 Angular 时更改垫子按钮的颜色

angular - 将 googlemaps 添加到 angular-cli