সম্পত্তি 'ধরা' টাইপ 'পর্যবেক্ষণযোগ্য <অন্য>' তে বিদ্যমান নেই


127

এইচটিটিপি পরিষেবা ব্যবহারের জন্য কৌণিক 2 ডকুমেন্টেশন পৃষ্ঠায় একটি উদাহরণ রয়েছে।

getHeroes (): Observable<Stuff[]> {
  return this.http.get(this.url)
                  .map(this.extractData)
                  .catch(this.handleError);
}

আমি কৌনিক 2-ওয়েবপ্যাক-স্টার্টার প্রকল্পটি ক্লোন করেছি এবং উপরের কোডটি আমি নিজে যুক্ত করেছি।

আমি Observableব্যবহার করে আমদানি করেছি

import {Observable} from 'rxjs/Observable';

আমি ধরে নিচ্ছি সম্পত্তিগুলিও Observableআমদানি করা হয়েছে ( .mapকাজ)। Rxjs.beta-6 এর চেঞ্জলগটি দেখেছি এবং সে সম্পর্কে কিছুই উল্লেখ করা হয়নি catch

উত্তর:


246

সতর্কতা : এই সমাধানটি কৌনিক 5.5 সাল থেকে অবচিত করা হয়েছে, দয়া করে নীচে ট্রেন্টের উত্তরটি দেখুন

=====================

হ্যাঁ, আপনাকে অপারেটরটি আমদানি করতে হবে:

import 'rxjs/add/operator/catch';

বা Observableএইভাবে আমদানি করুন :

import {Observable} from 'rxjs/Rx';

তবে এই ক্ষেত্রে, আপনি সমস্ত অপারেটর আমদানি করুন।

আরও তথ্যের জন্য এই প্রশ্নটি দেখুন:


2
আপনি কি জানেন কেন সম্পত্তিগুলি আমদানি করা হয় না import {Observable} from 'rxjs/Observable';? এটি আমার কাছে আরও স্বজ্ঞাত বলে মনে হচ্ছে।
ব্রায়ানআরটি

6
কারণ আরএক্সজেস এর মতো ডিজাইন করা হয়েছে। rxjs/Observableমডিউল অপারেটার আমদানি না কারণ সেখানে অপারেটরদের অনেক আছে। rxjs/Rxমডিউল আমদানির সব ... আমি মনে করে যে এটি একটি নকশা পছন্দ।
থিয়েরি টেম্প্লেয়ার

4
আরএক্সজেএস / আরএক্স থেকে আমদানি করা পৃষ্ঠায় লোড ডাউন করে। আপনি আরএক্সজেএস / আরএক্স ব্যবহার করবেন না তবে অনুরোধের সাথে অর্ধেক = অর্ধেক অনুরোধের তুলনা করুন তবে rxjs / পর্যবেক্ষণযোগ্য হিসাবে ব্যবহার করুন
danday74

আরএক্সজেএস / আরএক্স আমদানি প্রায়শই আর লিঙ্ক দেয় না, এটি একটি কালো তালিকাভুক্ত আমদানি। আমি জানি অতীতে এটিকে এক ধরণের ঠিকঠাক হিসাবে দেখা হত (এবং আমি এটি করে দিয়েছি), তবে আজকাল এটি কখনই চারপাশে খেলা ছাড়া অন্য কোনও কিছুর জন্য সঠিক উত্তরের অংশ হওয়া উচিত নয়।
টিম কনসোলজিও

93

আরএক্সজেএস 5.5+ এর সাহায্যে অপারেটরটি catchএখন হ্রাস করা হয়েছে। আপনার এখন catchErrorএকত্রে অপারেটরটি ব্যবহার করা উচিত pipe

আরএক্সজেএস ভি 5.5.2 অ্যাঙ্গুলার 5 এর জন্য ডিফল্ট নির্ভরতা সংস্করণ।

প্রতিটি আরএক্সজেএস অপারেটরের জন্য আপনি আমদানি করুন, catchErrorআপনি এখনই 'আরএক্সজেএস / অপারেটর' থেকে আমদানি করে পাইপ অপারেটর ব্যবহার করতে পারেন।

এইচটিটিপি অনুরোধ পর্যবেক্ষণযোগ্য এর জন্য ধরা ত্রুটির উদাহরণ

import { Observable } from 'rxjs';
import { catchError } from 'rxjs/operators';
...

export class ExampleClass {
  constructor(private http: HttpClient) {
    this.http.request(method, url, options).pipe(
      catchError((err: HttpErrorResponse) => {
        ...
      }
    )
  }
  ...
}

এখানে লক্ষ করুন যা এর catchসাথে প্রতিস্থাপন করা হয়েছে catchErrorএবং pipeঅপারেটরটি আপনাকে বিন্দু শৃঙ্খলাবদ্ধকরণের সাথে ব্যবহার করার অনুরূপভাবে অপারেটরগুলি রচনা করতে ব্যবহৃত হয়।


উপর rxjs ডকুমেন্টেশন দেখুন pipable (আগের নামে পরিচিত lettable আরও তথ্যের জন্য) অপারেটর।


হয় map(res => res)প্রয়োজনীয়?
পিটার ডি বাই

1
নাহ, আরএক্সজেএস pipeফাংশন আপনাকে একক ফাংশনে একাধিক ফাংশন একত্রিত করতে দেয়। পাইপ () ফাংশনটি তার আর্গুমেন্ট হিসাবে আপনি যে ফাংশনগুলি একত্রিত করতে চান তা গ্রহণ করে এবং একটি নতুন ফাংশন প্রদান করে যা কার্যকর করা হলে ক্রমযুক্তভাবে রচিত ফাংশনগুলি চালায়। প্রযুক্তিগতভাবে এটি একটি পরিচয় ফাংশন হওয়ায় যে ম্যাপিংটি কিছুই করে না।
ট্রেন্ট

1
In angular 8:
for catch:
import { catchError } from 'rxjs/operators';

for throw:
import { Observable, throwError } from 'rxjs';

and code should be written like this.

getEmployees(): Observable<IEmployee[]> {
    return this.http.get<IEmployee[]>(this.url).pipe(catchError(this.erroHandler));
  }

  erroHandler(error: HttpErrorResponse) {
    return throwError(error.message || 'server Error');
  }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.