কৌনিক 2 http.post () অনুরোধটি প্রেরণ করছে না


140

আমি যখন কোনও পোস্টের অনুরোধ করি তখন কৌণিক 2 http এই অনুরোধটি প্রেরণ করে না

this.http.post(this.adminUsersControllerRoute, JSON.stringify(user), this.getRequestOptions())

এইচটিপি পোস্টটি সার্ভারে প্রেরণ করা হয়নি তবে আমি যদি অনুরোধটি এইভাবে করি

this.http.post(this.adminUsersControllerRoute, JSON.stringify(user), this.getRequestOptions()).subscribe(r=>{});

এটি কি উদ্দেশ্যযুক্ত এবং যদি কেউ আমাকে ব্যাখ্যা করতে পারে তবে কেন? নাকি এটি বাগ?

উত্তর:


226

যেহেতু ক্লাসের postপদ্ধতিটি Httpএকটি পর্যবেক্ষণযোগ্য ফেরত দেয় আপনি এটির আরম্ভ প্রক্রিয়াজাতকরণ সম্পাদন করতে আপনাকে এটি সাবস্ক্রাইব করতে হবে। পর্যবেক্ষণগুলি অলস হয়।

আরও বিশদ জানতে আপনার এই ভিডিওটি দেখতে হবে:


15
@ থাইরি ভিডিওটি দেখতে পাচ্ছেন না, যেহেতু এটি শুধুমাত্র সদস্যদের জন্য
তাতরিন

48

আপনি যদি কলটি সম্পাদন করতে চান তবে আপনাকে অবশ্যই পর্যবেক্ষণযোগ্য সাবস্ক্রাইব করতে হবে।

আরও দেখুন Http ডকুমেন্টেশন

সর্বদা সাবস্ক্রাইব করুন!

কোনও HttpClientপদ্ধতি তার এইচটিটিপি অনুরোধ শুরু করে না যতক্ষণ না আপনি সেই পদ্ধতিতে ফিরে আসা পর্যবেক্ষণযোগ্যতে সাবস্ক্রাইব () কল করেন। এটি সমস্ত HttpClient পদ্ধতির ক্ষেত্রে সত্য ।

AsyncPipe তোমার জন্য সদস্যতা (এবং সদস্যতা রদ করা) স্বয়ংক্রিয়ভাবে।

HttpClientপদ্ধতিগুলি থেকে ফিরে আসা সমস্ত পর্যবেক্ষণগুলি ডিজাইনের সাহায্যে শীতল । এইচটিটিপি অনুরোধ কার্যকর করা স্থগিত করা হয়েছে , আপনাকে অতিরিক্ত ক্রিয়াকলাপ যেমন পর্যবেক্ষণযোগ্য কিছু করার আগে tapএবং পর্যবেক্ষণযোগ্যকে প্রসারিত করার অনুমতি দেয় catchError

কলিং subscribe(...)পর্যবেক্ষণযোগ্যকে কার্যকর করার ট্রিগার HttpClientকরে এবং সার্ভারে এইচটিটিপি অনুরোধ রচনা এবং প্রেরণের কারণ দেয়।

আপনি এই পর্যবেক্ষণগুলিকে প্রকৃত HTTP অনুরোধগুলির ব্লুপ্রিন্ট হিসাবে ভাবতে পারেন ।

আসলে, প্রত্যেকে subscribe()পর্যবেক্ষণযোগ্য একটি পৃথক, স্বাধীন সম্পাদন শুরু করে। দুটি এইচটিটিপি অনুরোধে দুবার ফলাফল সাবস্ক্রাইব করা।

content_copy
const req = http.get<Heroes>('/api/heroes');
// 0 requests made - .subscribe() not called.
req.subscribe();
// 1 request made.
req.subscribe();
// 2 requests made.

41

পদ্ধতি পান সাবস্ক্রাইব পদ্ধতি ব্যবহার করার প্রয়োজন হয় না তবে পোস্ট পদ্ধতিতে সাবস্ক্রাইব প্রয়োজন। নমুনা কোডগুলি পান এবং পোস্ট করুন নীচে are

import { Component, OnInit } from '@angular/core'
import { Http, RequestOptions, Headers } from '@angular/http'
import 'rxjs/add/operator/map'
import 'rxjs/add/operator/catch'
import { Post } from './model/post'
import { Observable } from "rxjs/Observable";

@Component({
    templateUrl: './test.html',
    selector: 'test'
})
export class NgFor implements OnInit {

    posts: Observable<Post[]>
    model: Post = new Post()

    /**
     *
     */
    constructor(private http: Http) {

    }

    ngOnInit(){
        this.list()
    }

    private list(){
        this.posts = this.http.get("http://localhost:3000/posts").map((val, i) => <Post[]>val.json())
    }

    public addNewRecord(){
        let bodyString = JSON.stringify(this.model); // Stringify payload
        let headers      = new Headers({ 'Content-Type': 'application/json' }); // ... Set content type to JSON
        let options       = new RequestOptions({ headers: headers }); // Create a request option

        this.http.post("http://localhost:3000/posts", this.model, options) // ...using post request
                         .map(res => res.json()) // ...and calling .json() on the response to return data
                         .catch((error:any) => Observable.throw(error.json().error || 'Server error')) //...errors if
                         .subscribe();
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.