2017-03-24 6 views
0

構文解析されたJSONオブジェクト(mapStocks()関数)のmap()関数をStockServiceクラスの中に置くと、map()関数が失敗します。しかし、関数をStockServiceクラスの外にある "グローバル"関数として宣言すると、エラーは発生しません。クラスのプライベートmap()関数は失敗しますが、グローバル関数は成功します - なぜですか?

ご覧のとおり、私たちはStockオブジェクトの独自の配列に割り当てる前に計算を行うためにtoStock()関数が必要です。

私はStockServiceのクラスにtoStock()関数を宣言した場合にスローされるエラーはこれです:なぜそうなのか enter image description here 誰が説明していただけますか?それはTypeScriptの制限ですか?

+2

どのように 'JavaScriptでthis'仕事を理解するために、この質問に対する私の答えを参照してください。http://stackoverflow.com/questions/ 13441307/this-keyword-in-an-object-literal/13441628の?s = 1 | 4.1256#13441628 – slebetman

+0

@StrangeCodeのようなキーワードです。 'this'はtypescriptのスコープが異なります。なぜなら、 'function(){これはこちらがこのスコープの外にあります} 'を入力してから'()=> //何かを実行する(矢印関数) ' –

答えて

4

通常のjavascript関数は、.map(this.mapStocks)に設定しています。 thisオブジェクトは、クラスではなく関数のオブジェクトに変更されます。ここではthis.toStock()は未定義です。

使用Function.Prototype.bind()

.map(this.mapStocks.bind(this))

コンプリートコール:

let stocks$ = this.http 
    .get(`${this.baseUrl}/api/getInventory`, { headers: this.getHeaders() }) 
    .map(this.mapStocks.bind(this)) 
    .toPromise() 
    .catch(this.handleError); 
-2
getStocks(): Promise<Stock[]> { 
console.log('Loading stocks...'); 
let stocks$ = this.http 
    .get(`${this.baseUrl}/api/getInventory`, { headers: this.getHeaders() }) 
    .map(res => { return this.toStock(res.json()) }) 
    .catch(this.handleError); 
} 
+0

あなたがしたこととその理由を説明できますか?できたね?さらに詳しい情報をお知らせください! – ndsmyter

関連する問題