【问题标题】:TypeError: Cannot read property 'subscribe' of undefinedTypeError:无法读取未定义的属性“订阅”
【发布时间】:2018-04-22 23:24:15
【问题描述】:

调用java编写的服务的方法

 resendRealTime(envelopeIds: String[]): Observable<String> 
  {
    let headers = new HttpHeaders({ 'Content-Type': 'application/json',
        'Accept': 'application/json' });
     console.log(envelopeIds);
    let json = JSON.stringify({envelopeIds: envelopeIds});
    console.log(json);
     return this.http.post<String>(`${AppSettings.baseServiceUrl}/docusign/resendRealTime`, json, {headers: headers} )
    .catch((error: Response) => this.handleErrors(error));
}

调用上述方法的方法

 resendEnvelope() {
   let envelopeIdsArray = new Array<String>();
  console.log('Inside resend');
  this.envelopeIdsHolder.envelopeIds.forEach(function (item) {
      envelopeIdsArray.push(item);
  })

  this.backendService.resendRealTime(envelopeIdsArray).subscribe( result => console.log(`Service resend envelope returned '${result}'`));
}

Java 服务

@RequestMapping(value = "/resendRealTime", method = {RequestMethod.POST})
public ResponseEntity<?> resendRealTime( @RequestBody EnvelopeIds envelopeIds) {
    log.info("envleopeIds : " + envelopeIds);
    System.out.println("inside resendrealtime");
    SwpDocuSignBulkLoader.resendRealTime(envelopeIds);

    return  new ResponseEntity<String>("ok", HttpStatus.OK);
}

我在这里使用 Angular 中的 HTTPCLIENTMODULE 进行调用,但在这里它正在返回“TypeError:无法读取未定义的属性'订阅'”。返回ResponseEntity的java端没有问题

【问题讨论】:

  • backend.service.ts:134 错误:OK 错误类型错误:在 Observable._trySubscribe (Observable.js:172) 无法读取 Observable._subscribe (Observable.js:231) 未定义的属性“订阅” ) 订阅者._error@订阅者.js:130订阅者.错误@订阅者.js:104订阅者._错误@订阅者.js:130
  • 以上是我收到的错误

标签: angular angular2-services


【解决方案1】:

您可以查看Observables in angular

const observ = this.http.post(...)
const handler = ovserv.share() // in case you want to handle it by yourself
handler.subscribe((results) => {}, (err) => {}, (complete) => {})
return handler

发生的事情是 Observable.catch 返回 null 然后您尝试“订阅”未定义的对象。

【讨论】:

  • 不确定 observable.catch 是否返回 null,我尝试了下面的方法,它只是返回响应,但我仍然看到问题。 @RequestMapping(value = "/resendRealTime", method = {RequestMethod.POST}) public ResponseEntity> resendRealTime(@RequestBody EnvelopeIds envelopeIds) { log.info("envleopeIds : " + envelopeIds); return new ResponseEntity("ok", HttpStatus.OK); }
  • 问题出在客户端而不是服务器端,您可以使用 Chrome 检查工具进行验证。 (您可以在您的页面上跟踪网络流量)
  • 抱歉,我是 Angular 新手。为什么要抓到这里?由于服务的响应没有问题
猜你喜欢
  • 2018-02-13
  • 2020-06-17
  • 1970-01-01
  • 2020-08-05
  • 1970-01-01
  • 1970-01-01
  • 2020-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多