首页 > 解决方案 > 可观察到此范围不适用于回调函数

问题描述

我正在使用 observable 将共享服务中的值共享给其他组件,但是在订阅时该值未定义。当我不使用任何回调函数时,我检查了 observable 和订阅者工作正常,但是当我通过回调函数中的 setter 方法设置“this”变量时,this 的范围似乎已经完成并且订阅者的值显示为未定义...

共享/ExamplenService.ts

    @Injectable()
    export class ExamplenService {
    someValue: any;



      public seturl(someUrl:String){
     this.url=someUrl;
       });


       public seturl(){

       var that=this;
       return  return Observable.create(observer => {
      cognitoUser.authenticateUser(authenticationDetails, {
      onSuccess: function (result) {
      // Some code

    getOtherUrl:function(err, data){ // Call back
     console.log("Checkdata"+data.url);// I can see the value here
      that.seturl(data.url) // The value is getting set here

        }

       });


    public getSomething(): any {
    const studentsObservable = new Observable(observer => {
       setTimeout(() => {
           observer.next(this.sameValue);
       }, 1000);
    });

    return studentsObservable;
   }

仪表板/测试/TestComponent.ts

  export class TestComponent implements OnInit
 _data : any;


constructor(private http: Http, private example: ExamplenService) {

 }

    ngOnInit() {
    const s= this.example.getSomething().subscribe((_url :String)=>
    {

      console.log("Rest1"+_url);//This log is  showing undefined)
     this._data =_url;
     console.log("Rest2"+this._data);//This log is  showing undefined)
   });
   }

标签: angulartypescript

解决方案


不确定,但试试这个:

ngOnInit() {
  const s = this.example.getSomething().subscribe((_url: String) => {
    if (_url) {
      console.log("Rest1" + _url);
      this._data = _url;
      console.log("Rest2" + this._data);
    }
  });
}

推荐阅读