2017-03-27 6 views
1

ルーキーミスを犯していないことを望みますが、私はこれを理解できないようです。これはコンポーネント参照配列にサブスクリプションの結果を割り当てることができません

search(term: string,service,refArray: any[]){ 
    service.search(term) 
    .subscribe(
     result => { 
     refArray = result; 
     console.log(refArray); // display result as it should 
     console.log(this.resultArray); // display "undefined" 
     }, 
     err => { 
     refArray = []; 
     console.log(err); 
     }, 
    () => {console.log('completed')} 
    ); 
} 

内部関数である

そして、私はこのようにそれを使用します: は、だからここのコードです

this.search(
    searchTerm, 
    this.Service, 
    this.resultArray, 
); 

問題は、「私のコンポーネントレベルで変数宣言したということです関数の「refArray」パラメータが正常に取得されたとしても、apiSpotsはサブスクリプションの結果を得ることはありません。 サブスクリプション内の「refArray」は、関数に渡すものとまったく同じではないと思われますが、解決方法はわかりません。

すべてのアイデア?

EDIT: 検索機能

search(term: string,service,callback: (result) => void){ 
service.search(term) 
    .subscribe(
    result => { 
     callback(result); 
    }, 
    err => { 
     callback([]); 
     console.log(err); 
    }, 
    () => {console.log('completed')} 
); 
} 

と利用

let context = this; 
this.search(
    searchTerm, 
    this.Service, 
    function(result){ 
     context.resultArray = result; 
    }, 
); 

答えて

3

私が問題を正しく理解していれば、service.search(term)の結果を参考として渡されたrefArray配列に割り当てる必要があります。あなたはこの使用している場合

refArray = result 

を次に、あなたはresultでローカル変数refArrayをオーバーライドしているが、これは、参照(元の配列)には影響しません。 refArrayというローカル変数を再割り当てしたばかりです。

ただし、アレイをインプレースで変更する方法は使用できます。たとえば、ループ内でrefArray.push()を呼び出して、result配列のすべての項目を追加します。それにもかかわらず、これはRxを使用する最良の方法ではありません。代わりに

観測を返します。その後、

search(term: string,service,refrray: any[]){ 
    return service.search(term); 
} 

そして、あなたがそれを必要とするとき、それを購読する:また

this.myService.search(...).subscribe(result => this.resultArray = result); 

、あなたが本当にそれをあなたが右のそれを使用している方法を使用する必要がある場合今度はrefArrayを渡さずに、その結​​果をローカルスコープのthis.resultArrayに代入するコールバック関数を使用してください。次にsearch()メソッドを呼び出すときは、subscribe()コールからコールバックを呼び出すだけです。

+0

私はそれを今得ます、ありがとう。 –

0

あなたが入れている:タイプミス

SOLUTION:、マーティンにTHXは、ここで修正されたサンプルは

そうですrefArrayへのサービスからの結果の値です。通常は値を表示しますが、resultArrayは未定義として渡されたため、未定義です。間違いは関数を呼び出す前に起こった。

+0

私は "subscribe()"メソッドの中で "refArray"を意味し、 "refArray"は関数に渡されたものと同じではありませんか? –

+0

男は正しく答えました –

関連する問題