2017-10-21 12 views
0

Observablesの新機能です。私はレシピを取得していますが、私はその表示未定義の外で印刷していたときにサブスクライブの内側recipeListを印刷するときだからここに私のコードは変数にサブスクライブしたデータを取得できません

recipesList:Recipe[]; 


private recipes; 
constructor(private shoppingService:ShoppingListService,private http:Http){ 
    this.getRecipesFromUrl().subscribe((data)=>{ 
    this.recipesList=data; 
    console.log(this.recipesList);//printing array containing recipes 
    }); 
    console.log(this.recipesList);//printing undefined 
} 

である私の問題はあります。 recipeListにデータを保存して、他の方法でデータにアクセスできるようにする方法。

+1

にconsole.log購読の外側がデータにアクセスすることはできません行うことができます

到着まで待つ必要があります。 recipeListへのアクセスが必要なメソッドは、データがロードされた後に呼び出される必要があります。 – LLai

+0

重複の場合と同様に、コールバック(購読)内で必要な/やりたいことをする必要があります:) – Alex

答えて

0

コードの問題は、getRecipesFromUrlが非同期操作であることです。終了するまでに、ログ操作が実行されたため、recipesListは未定義になります。あなたはいつも購読し、データはあなたがデータをフェッチすることは非同期であるため、この

recipesList: Observable<Array<Recipe>>; 

constructor(private shoppingService:ShoppingListService, private http:Http) { 
    this.recipesList = this.getRecipesFromUrl(); 

    //Subscribe and handle data when it arrives 
    this.recipesList.subscribe((recipes) => { 
     console.log("Recipes", recipes); 
    } 
} 

list() { 
    //Subscribe here too 
    this.recipesList.subscribe((recipes) => { 
     console.log("Recipes", recipes); 
    } 
} 
} 
関連する問題