Angular 2 HTTP POST错误,未在Fiddler中显示

时间:2017-07-04 21:55:08

标签: angular http rxjs

我一直在使用Angular 1大约1。5年,我现在正在尝试学习Angular 2.我已经创建了一个简单的Blog应用程序来测试它。当我尝试POST到Web服务时,我的POST出现了错误。更大的问题是,catch()块中的代码没有执行。并且调用本身并未显示在Fiddler或浏览器的“网络”选项卡中,因此错误优先于任何网络或Web API问题。由于catch()失败了,我没有什么可继续的。这是我的代码片段,以及显示吞下错误的视频。有什么想法吗?

https://www.screencast.com/t/ibxB9hBDYXLn

  insertPost(post: Post) {
    let headers = new Headers({ 'Content-Type': 'application/json' });
    let options = new RequestOptions({ headers: headers });
    // let jsonPost = JSON.stringify(post);

    let url = 'http://localhost:53757/api/Posts';
    return this.http
      .post(url, post, options)
      .map((response: Response) => {  // This is where the error occurs
        let ret = <string>response.json(); // This line never executes
        return ret;
      })
      .do(data => console.log(data))
      .catch((err: Response) => {  // The error is caught here, BUT...
        let details = err.json(); // This line never executes either
        console.log('Error: ' + details);
        return Observable.throw(details);
      });
    // .catch(this.handleError);

  }

  private handleError(error: Response) {
    console.error(error);
    let msg = `Error status code ${error.status} at ${error.url}`;
    return Observable.throw(msg);
  }

更新:所以我想出了部分内容。看来这是一个Observable,所以我需要订阅它才能使它工作。我仍然不太了解Promises新的范式转变。所以,这有效:

  insertPost(post: Post) {
    let headers = new Headers({ 'Content-Type': 'application/json' });
    let options = new RequestOptions({ headers: headers });
    let url = 'http://localhost:53757/api/Posts';
    let postResponse;

    return this.http
      .post(url, post, options)
      .map((res: Response) => res.json())
      .subscribe((res: Post) => postResponse = res);
  }

现在问题是,我怎么知道这个HTTP调用何时完成,以便我可以调用重定向来查看新帖子?在Angular 1和promise中,我可以使用.then()调用(来自调用服务的函数),这样我就可以在帖子完成后调用重定向。使用observable时如何才能完成这项工作?

0 个答案:

没有答案