angular 5 - 如何从服务获得订阅组件

时间:2018-04-12 08:34:11

标签: angular subscribe

我想在服务中获取数据,但我不知道它是怎么做的。

这是我的方法服务日历:

  setWbsRdv(RDV: CalendarModel) {//enregistre le rendez-vous
    this._http.post<CalendarModel>(this.wbsSaveDate, { RDV }).subscribe((data) => {
      return data; //if console.log(data) is retourn "save ok"
    }, (error) => {
    })

这是我的组件是呼叫服务日历

  validRDV() {
   // console.log(this._RDV);
    this._visiteur.getWbsJwt().subscribe(
      apiJwt => {
        this._visiteur.jeton = apiJwt;//enregistrement du jeton pour une utilisation ultérieure un autre composant
        this._RDV.setJwt(apiJwt); // !! important injecter le jeton dans l'objet RDV
        let reponse = this._calendarService.setWbsRdv(this._RDV); //enregistrement du RDV   
        console.log(response);

      }
    );
  }

console.log(响应)是unifined,如何正确加载此响应 在我的模板中显示?

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

您需要在getWbsJwt().subscribe内再次订阅setWbsRdv。从subscribe中移除setWbsRdv部分,然后移入组件。

apiJwt => {
    this._visiteur.jeton = apiJwt;
    this._RDV.setJwt(apiJwt);
    this._calendarService.setWbsRdv(this._RDV).subscribe(here your logic);       
}

答案 1 :(得分:0)

不要实施&#39;订阅&#39;在你的服务中。 &#39;订阅必须由您使用的消费者实施。 请编码如下。

&#13;
&#13;
  setWbsRdv(RDV: CalendarModel) {
   return this._http.post<CalendarModel>(this.wbsSaveDate, { RDV });
}
&#13;
&#13;
&#13;

&#13;
&#13;
  validRDV() {
   // console.log(this._RDV);
    this._visiteur.getWbsJwt().subscribe(
      apiJwt => {
        this._visiteur.jeton = apiJwt;//enregistrement du jeton pour une utilisation ultérieure un autre composant
        this._RDV.setJwt(apiJwt); // !! important injecter le jeton dans l'objet RDV
        let reponse = this._calendarService.setWbsRdv(this._RDV).subscribe((data) => {
      return data; //if console.log(data) is retourn "save ok"
    }, (error) => {
    }); //enregistrement du RDV   
        console.log(response);

      }
    );
  }
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您应该使用rxjs catch / throw运算符并将它们与服务中的Observable结合使用。这样做:

import { Observable } from 'rxjs/Observable'
import 'rxjs/add/operator/catch'
import 'rxjs/add/observable/throw'

@Injectable()
export class MyService {

errorHandler (error) {
    return Observable.throw(error.error.message)
  }

testFunction (body): Observable<any> {
    return this.http
    .post('some-route', body, httpOptions)
    .catch(this.errorHandler)
  }

}

在您的组件中,请执行以下操作:

this._myService.testFunction(bodyObject).subscribe(
    res => {
        // this block is executed if you receive a valid response from your server
    },
    err => {
        // here is here your Observable will throw an error if it occurs
        // this block is executed if you receive an error from your server
    }
)

这是保持代码清洁和组织良好的最佳方法。