在另一个函数

时间:2016-05-17 16:19:20

标签: javascript angular ionic2

我对angularjs2和ionic 2

中的变量this有疑问

我有这个功能:

getAnuncio(id_anuncio){
    console.log(id_anuncio)
    var token=this.local.get('token')._result; 
    var headers= new Headers();
    headers.append('Content-Type', 'application/x-www-form-urlencoded');
    headers.append('Authorization', 'Token '+token);
    datos="id_anuncio="+id_anuncio;
    this.http.post('http://127.0.0.1:8000/envios/getAnuncioPorId/',datos , {
        headers: headers

    })

    .subscribe(success => {
        this.anuncio=success.json();
        console.log("BIENNN");
        console.log(success);
        console.log(this.anuncio);
        return this.anuncio;



    }

}

我从另一个函数调用它:

cargarMapa(){

    this.anuncio=this.getAnuncio(this.envio.anuncio);
    console.log(this.anuncio);
    //console.log(anuncio);
    //this.getOferta(this.envio.oferta);
    //console.log(this.oferta)
}

但是当我尝试记录this.anuncio时,它是未定义的。

我需要将数据存储在变量中以便从其他函数中使用它。

有人可以帮助我吗?

以下是代码:https://github.com/p02diada/cyclaClientv2/blob/master/app/pages/sending-details/sending-details.js

1 个答案:

答案 0 :(得分:0)

您可以通过这种方式利用do运算符:

getAnuncio(id_anuncio){
  console.log(id_anuncio)
  var token=this.local.get('token')._result; 
  var headers= new Headers();
  headers.append('Content-Type', 'application/x-www-form-urlencoded');
  headers.append('Authorization', 'Token '+token);
  datos="id_anuncio="+id_anuncio;
  this.http.post('http://127.0.0.1:8000/envios/getAnuncioPorId/',datos , {
    headers: headers

  })
  .map(res => success.json())
  .do(data => {
    this.anuncio = data;
  });
}

这样您就可以在getAnuncio方法之外订阅observable:

this.anuncio=this.getAnuncio(this.envio.anuncio).subscribe(
  (anuncio) => {
    // do something
    console.log(anuncio);
  }
);

不要忘记事情是异步的。

如果要实现某种缓存,请使用以下命令:

getAnuncio(id_anuncio){
  if (this.anuncio) {
    return Observable.of(this.anuncio);
  } else {
    var token=this.local.get('token')._result; 
    var headers= new Headers();
    (...)
  }
}

直接使用this.anuncio,您无法确定数据是否存在......