gpt4 book ai didi

angular - 使用或不使用订阅将数据发布到 API

转载 作者:行者123 更新时间:2023-12-04 01:47:15 25 4
gpt4 key购买 nike

在 Angular 7 中,我从 API 获取和发布数据。

获取

  • 为了获取数据,我使用了 Observable (posts$) 和管道/ map ;
  • 我在组件 HTML 和 中使用异步不使用订阅 ;
  • 这是我最近在 Angular 文档中看到的方法。

  • 发布
  • Service Post 方法也返回数据:
    可能的验证错误或创建的帖子的 ID。
    当 API 返回它们时,我需要获取它们中的任何一个。

  • 但是,当调用该服务进行 POST 时,以下内容不执行任何操作:
    this.postService.addPost(model).pipe();

    除非我使用 subscribe如下:
    this.postService.addPost(model).pipe().subscribe();

    问题
    如何在不使用订阅的情况下发布到 API?它有意义吗?

    组件
    export class PostComponent implements OnInit {

    posts$: Observable<GetPostsModel[]>;

    constructor(private postService: PostService) { }

    ngOnInit() {
    this.posts$ = this.getPosts();
    }

    addPost(model: AddPostModel) {

    this.postService.addPost(model).pipe().subscribe();

    }

    getPosts(): Observable<GetPostsModel[]> {

    return this.postService.getPosts().pipe(

    map((response: GetPostsResponse) =>

    return {
    // Map Response to GetPostsModel here
    };

    }));

    }

    }

    服务
    export class PostService {

    constructor(private httpClient: HttpClient) { }

    public addPost(model: AddPostModel): Observable<AddPostResponse>> {

    const headers = new HttpHeaders({ 'Content-Type': 'application/json' });

    return this.httpClient.post<AddPostResponse>>('posts', model, { headers: headers });

    }

    public getPosts(): Observable<GetPostsResponse>> {
    return this.httpClient.get<GetPostsResponse>>('posts');
    }

    }

    最佳答案

    How would I post to the API without using subscribe?



    你不能,你必须总是订阅。如果您不关心结果,则不必提供回调。这是完全有效的:
    this.postService.addPost(model).subscribe();

    旁注:您不需要空的 pipe在这种情况下

    另见 Angular 2 http.post() is not sending the requestHttpClient - Always subscribe!文档。

    Always subscribe!

    An HttpClient method does not begin its HTTP request until you call subscribe() on the observable returned by that method. This is true for all HttpClient methods.

    关于angular - 使用或不使用订阅将数据发布到 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54813619/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com