2017-02-24 9 views
-1

それを取得しないでください。私の結果がもっと必要なのであれば、例えば変数ヒーローを入力するだけではなく、私は成功または完了した別の関数を呼び出すが、私はできません。それはなぜ、どうやってやるべきか?私は別の変数が同じデータを応答(コピー)から返す必要がありますが、データを取得した後にしかコピーを作成できません。angular 2 http.get subscribe:サービスが完了したら別の関数を呼び出す方法は?

this.myService.getHeroes() 
    .subscribe(
     function(response) { 
      response => this.heros = response; 
     }, 
     function(error) { 
      console.log("Error happened" + error) 
     }, 
     function() { 
      console.log("the subscription is completed"); 
     } 
    ); 
+0

を開始するには、transpileしないこと。あなたは '(応答)=> this.heros = response;'と 'function'と矢印関数の組み合わせではない**を望みます。 – Igor

+0

10倍私はそれを修正しますが、それでも同じ問題です。私は成功/エラー/完了関数内から他の関数​​を呼び出すことはできません – AngularOne

+0

まず関数を定義してから、/: –

答えて

4

応答を受け取った直後に関数を呼び出すことができます。

thisキーワードのスコープは関数内にカプセル化されているので、あなたがあなたの他のコンポーネント変数にアクセスすることができない理由は次のとおりです。そのような種類のユーザーが提供するものに拡張すること

this.myService.getHeroes() 
 
    .subscribe(res => { 
 
     this.heros = res; 
 
     //insert whatever you want here, e.g. function which needs to wait for asynchro response 
 
    }, 
 
    error => { 
 
     console.log("Error happened" + error) 
 
    } 
 
);

+0

を呼び出さなければなりません。あなたの関数が関数ではないというエラーが表示されます – AngularOne

+0

@AngularOneそれは例として...あなたはあなたがそこに欲しいものを挿入することができます。いくつかの関数は、非同期応答を待たなければなりません。また削除することもできます。 –

+1

@AngularOne @Kinduserが正しいです。 '' this.heroes = res''の後に '' function''を呼び出すべきです。 '' Observable''関数がObservableでオペレーションを終了したときに呼び出す '' complete''関数です。しかし、もしそうでなければどうしますか?多分、このストリームは無限です。そして、 ''完全な ''は今まで – lomboboo

1

コンポーネント変数についてはもはや分かりません。

コンポーネント変数を参照するためには、あなたの代わりに、ラムダ式を使用する必要があります:あなたの構文が間違っていると

@Component({ 
    selector: 'app-browse', 
    templateUrl: './browse.component.html', 
    styleUrls: ['./browse.component.css'] 
}) 
export class BrowseComponent implements OnInit { 

    constructor(private myService: MyService) { } 

    myString: string = 'dogs'; 

    doStuff() { 
    this.myService.doMoreStuff().subscribe(returnValue => { 
     console.log(this.myString); // 'dogs' 
     this.myOtherFunction(); // 'other stuff' 
    }); 

    this.myService.doMoreStuff().subscribe(function(returnValue) { 
     console.log(this.myString); // undefined 
     // myString does not exist with the scope of this function 
     var myString = 'cats'; 
     console.log(this.myString); // 'cats' 
    }); 
    } 

    myOtherFunction() { console.log('otherStuff'); } 

} 
関連する問題