[英]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 T
為User
類型。
這是一個完整的工作示例:
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.