2016-12-22 28 views
2

私はいくつかのサービスに対して以下のsubscribe関数を持っています。typescript subscribe関数の外で値を取得する方法

this.sub = this.route.params.subscribe(params => { 
this.id = params['id']; 
this._someService 
     .thisById(this.id) 
     .subscribe(value => { 
     this.valueObj = value; 
    }); 
}); 

これは大丈夫です。それ以外は、subscribe関数の外で次の関数にthis.valueObjを使用する必要があります。

private _checkOpeningHours(data: any): string { 
    const curDayName = this._getDayName(); 
    const todaysOpeningData = ***this.valueObj***.openHours[curDayName]; 

    if (!todaysOpeningData) return "ERROR!"; 
    if (!todaysOpeningData.status) return `IT'S ${curDayName.toUpperCase()} - WE ARE CLOSED TODAY!`; 

    return `IT'S ${curDayName.toUpperCase()}, ${new Date().toLocaleString("en-US", { hour: '2-digit', minute: '2-digit' })} - ${this._isOpen(todaysOpeningData) ? 'WE ARE OPEN' : 'SORRY, WE ARE CLOSED'}!`; 

    } 

    private _refresh() { 
    this.opening = this._checkOpeningHours(***this.valueObj***.openHours[this._getDayName()]); 

    setTimeout(() => this._refresh(), 60 * 1000); 
    } 

は、どのように私は、これらの機能は、this.valueObjで動作するように入手できますか?

+0

私は角度についてはあまりよく分かりませんが、多くの依存性注入を使用することを覚えています。角度が値を注入するように、名前に一致するパラメータをメソッドに追加できますか? – styfle

+0

このthisById関数が非同期であり、thisByIdが返す前に他の関数を呼び出すことは問題ではないと確信していますか? – toskv

+0

'_checkOpeningHours'と' _refresh'関数はどこに定義されていますか?他のコードと同じクラスにはありませんか? plsはいくつかの文脈を追加します – lenny

答えて

3

非同期呼び出しを正しく連結する必要があります。

あなたは

someMethod() { 
    this.sub = this.route.params.subscribe(params => { 
    this.id = params['id']; 
    return this._someService 
     .thisById(this.id) 
     .map(value => { 
     return this.valueObj = value; 
    }); 
    }); 
} 

map代わりのsubscribeが必要)、観察を返す場合、あなたはそれが_checkOpeningHours()は、値の前にthis.valueObj looongにアクセスする可能性が非常に高いです、連鎖適切なければ

private _checkOpeningHours(data: any): string { 
    this.someMethod().subscribe(val => { 
    console.log(val); // here the value is available 
    }); 
} 

のようにそれを使用することができます利用可能になる。

+0

何らかの理由で私はこのタイプエラーが発生します:未定義のプロパティ 'subscribe'を読み取ることができません –

+0

'return'を' return this._someService'に追加しましたか? –

+0

私は 'map'の中で' return'も忘れていました( '{}'のために必要です)。 –

関連する問題