簡體   English   中英

將數組轉換為可觀察的類型<T[]>

[英]Convert array to the type of Observable<T[]>

我想將數組轉換為Observable<T[]> ,並使用了rxjs方法“ from”。 但是它返回Observable<T> ,有沒有辦法將數組轉換為Observable<T[]>

Player: Observable<T[]>;

convert(){
let tempArr:T[] = Object.values(data) as T[];
let Obsobj = from(tempArr);
this.Player = Obsobj;
}

這是我收到的錯誤消息, Observable<T>不能分配給Observable<T[]>

編輯

即使使用以下代碼段,返回類型也不符合預期。

let $sub = new Subject<Array<T>>();
$sub.next(tempArr);
this.Player$ = $sub.asObservable();

由於我希望返回的可觀察類型如下。

Observable {_isScalar: false, source: Observable, operator: MapOperator}

但返回了以下內容。

Observable {_isScalar: false, source: Subject}

編輯#2

完整的代碼段。

Player: Observable<B[]>;

convert(data: Dictionary<B>){
   let tempArr:B[] = Object.values(data) as B[];
   let $sub = new Subject<Array<B>>();
   $sub.next(tempArr);
   this.Player$ = $sub.asObservable();
}

這是什么問題? 有什么幫助嗎?

從文檔中觀察到:對於數組和可迭代對象,所有包含的值將作為序列發出! 因此,您的項目將始終以T而不是T []的形式發出

對於Observable<T[]>請執行以下任一操作:

$sub = new Subject<Array<T>>();
this.Player = $sub.asObservable();

要么

this.Player = of(array);

要么

Observable.create((observer) => {observer.next(array)})

使用of運營商,而不是from

import { of } from 'rxjs';
...

player: Observable<T[]>;

convert(){
  let tempArr:T[] = Object.values(data) as T[];
  let Obsobj = of(tempArr);
  this.Player = Obsobj;
}

這不是泛型的工作方式。

您必須重構代碼才能使其正常工作。

理想情況下,您的convert方法應該期望泛型T

像這樣:

convert<T>(array: Array<T>): Observable<Array<T>> {
  return of(array);
}

當您調用convert ,您將這樣稱呼它:

this.convert<User>([{ firstName: `John`, lastName: `Doe` }])
  .subscribe((userArray: Array<User>) => console.log(userArray));

當您這樣做時,您是在告訴您的convert函數您希望Type TUser類型。

這是一個完整的工作示例:

import { Component } from '@angular/core';
import { Observable, of } from 'rxjs';

interface User {
  firstName: string;
  lastName: string;
}

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  player: Observable<Array<User>>;

  ngOnInit() {
    this.convert<User>([{ firstName: `John`, lastName: `Doe` }])
      .subscribe((userArray: Array<User>) => console.log(userArray));
  }

  convert<T>(array: Array<T>): Observable<Array<T>> {
    return of(array);
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM