【问题标题】:Unable to subscribed data into a variable [duplicate]无法将数据订阅到变量中[重复]
【发布时间】:2017-10-21 14:53:48
【问题描述】:

我是使用 Observables 的新手。所以这是我的代码

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 时,我得到了食谱,但是当我在其显示未定义之外打印时。 如何将数据保存到 recipeList 以便我可以在其他方法中访问它。

【问题讨论】:

  • 订阅之外的 console.log 无法访问数据,因为获取数据是异步的。任何需要访问 recipeList 的方法都必须在数据加载后调用。
  • 与副本一样,您需要在回调(订阅)中执行您需要/想要的操作:)

标签: angular angular-observable


【解决方案1】:

您的代码的问题在于 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);
    }
 }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    相关资源
    最近更新 更多