如何从observable返回值并将其赋值给变量

时间:2017-04-23 01:33:50

标签: javascript angular typescript ionic-framework rxjs

我想从observable中返回此方法的值,以便通过将其分配给viewcount变量在另一个函数中使用它。 我如何正确地从observable返回值并将其分配给公共变量以供以后使用。

public viewcount:any  

public getcount(id){
  let view = " ";
  this.backandService.getViews(id).subscribe(
    (data:any) =>{
      view = data["0"].views
      console.log(view)
    }
  );
  return view;
}

现在用我做的另一种方法

 public updateViews(id){
     let  view:any = this.viewcount;
       this.backandService.update('videos',id,
  {"viewcount":JSON.stringify(view)}).subscribe(
         data =>{
           console.log (data);
         }
       );
     }

但永远不会返回该值,以便在updateView方法和控制台日志中使用它,updateView xhr requests仅显示未找到的404 request payload {{1}}标题中的1}}显示一个空括号。

1 个答案:

答案 0 :(得分:1)

因为您要将值分配给模块级变量,所以您不能将该变量设为数字,但它本身需要是一个承诺。

public viewCount: Promise<number>;

public requestCount(id){
  this.viewCount = new Promise<number>((resolve,reject) => {
    this.backandService.getViews(id).subscribe(
      (data:any) =>{
        let view = data["0"].views;
        console.log(view);
        resolve(view);
    });
   });
}

public async updateViews(id): Promise<void>{
  let view = await this.viewcount;
  this.backandService.update('videos',id { 
    "viewcount":JSON.stringify(view)}).subscribe(data =>{
       console.log (data);
     });
  });
}

非异步方法:

public updateViews(id): Promise<void>{
  return this.viewcount.then(view => ( 
    this.backandService.update('videos',id { 
      "viewcount":JSON.stringify(view)}).subscribe(data =>{
         console.log (data);
       });
    });
  })'
}