【问题标题】:How to return the value from the observable and assign it to a variable如何从可观察对象返回值并将其分配给变量
【发布时间】:2017-09-19 20:40:45
【问题描述】:

我想从一个 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 显示空括号。

【问题讨论】:

    标签: javascript angular typescript ionic-framework rxjs


    【解决方案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);
           });
        });
      })'
    }
    

    【讨论】:

    • 如果这是 Angular 1(正如问题所暗示的那样),则应使用 $q.resolve() 包装承诺。
    • 我试图使用你给我的答案,但我得到了updateViews 方法的错误。 “异步功能仅在针对 ECMAscript 2015 或更高版本时可用”。我正在使用 ionic 2 框架
    • @estus 不,它是 angular2.0 和 ionic 2
    • @ObedLorisson 查看更新,
    • 因为您将值分配给模块级变量,所以不能将该变量设为数字,但它本身必须是一个承诺。 完全错误声明
    猜你喜欢
    • 2019-07-07
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    • 2021-09-22
    • 2017-11-26
    • 2018-04-11
    相关资源
    最近更新 更多