Javascript 可观察的create被调用两次

Javascript 可观察的create被调用两次,javascript,ionic-framework,rxjs,observable,Javascript,Ionic Framework,Rxjs,Observable,我将Ionic3与一个rxjs/Observable一起使用。我有下面的函数,出于某种原因,即使该函数只被调用一次,第三行也会被触发两次 findChats(): Observable<any[]> { return Observable.create((observer) => { this.chatSubscription2 = this.firebaseDataService.findChats().subscribe(firebaseItems

我将Ionic3与一个
rxjs/Observable
一起使用。我有下面的函数,出于某种原因,即使该函数只被调用一次,第三行也会被触发两次

findChats(): Observable<any[]> {
    return Observable.create((observer) => {
        this.chatSubscription2 = this.firebaseDataService.findChats().subscribe(firebaseItems => {
            this.localDataService.findChats().then((localItems: any[]) => {
                let mergedItems: any[] = [];
                if (localItems && localItems != null && firebaseItems && firebaseItems != null) {
                    for (let i: number = 0; i < localItems.length; i++) {
                        if (localItems[i] === null) {
                            localItems.splice(i, 1);
                        }
                    }
                    mergedItems = this.arrayUnique(firebaseItems.concat(localItems), true);
                } else if (firebaseItems && firebaseItems != null) {
                    mergedItems = firebaseItems;
                } else if (localItems && localItems != null) {
                    mergedItems = localItems;
                }
                mergedItems.sort((a, b) => {
                    return parseFloat(a.negativtimestamp) - parseFloat(b.negativtimestamp);
                });
                observer.next(mergedItems);
                this.checkChats(firebaseItems, localItems);
            });
        });
    });
}
问题

如何创建一个只有一个订阅的
可观察的

谢谢

更新

我使用
share()
将代码更改为以下内容,但第3行仍然会执行两次:

findChats(): Observable<any[]> {
    return Observable.create((observer) => {
        const obs = this.firebaseDataService.findChats().share();
        this.chatSubscription2 = obs.subscribe(firebaseItems => {
                     ....
findChats():可观察{
返回可观察的。创建((观察者)=>{
const obs=this.firebaseDataService.findChats().share();
this.chatSubscription2=obs.subscribe(firebaseItems=>{
....

正如其他用户所建议的,虽然findChats只被调用一次,但它返回的可观察对象似乎被多次订阅。
create
返回一个冷可观察对象,这将导致每个订阅执行所有内部逻辑。您可以在整个过程结束时敲打一个
共享(即,
create
调用之外/之后)来测试这一点,但我建议,如果您根本不使用
create
,而只是将原始流映射/平面映射/开关映射到所需流中(以避免手动订阅管理),那么解决方案实际上会更简单。

Make
const obs$=findChats().share()
然后只订阅
obs$。订阅(…)
谢谢Martin,但是:
[ts]属性“share”在类型“Observable”上不存在。
谢谢,我现在可以使用
shar(e)
,但它仍然不起作用,我可能没有正确地实现它。请参阅上面的UPADTE。您是否碰巧在其他地方调用了L
this.chatSubscription2.subscribe()
?谢谢,您是对的。
share()
修复了我的问题。但正如您所建议的,我将尝试折射我的代码,以避免使用
create
findChats(): Observable<any[]> {
    return Observable.create((observer) => {
        const obs = this.firebaseDataService.findChats().share();
        this.chatSubscription2 = obs.subscribe(firebaseItems => {
                     ....