প্রতিশ্রুতি। আরএক্সজেএস পর্যবেক্ষণযোগ্যদের সাথে সমস্ত আচরণ?


90

কৌণিক 1.x এ আমার মাঝে মাঝে একাধিক httpঅনুরোধ করা এবং সমস্ত প্রতিক্রিয়া সহ কিছু করা দরকার। আমি সমস্ত প্রতিশ্রুতি একটি অ্যারে এবং কল করতে হবে Promise.all(promises).then(function (results) {...})

কৌণিক 2 সেরা অনুশীলনগুলি অনুরোধে Observableপ্রতিশ্রুতি প্রতিস্থাপন হিসাবে RxJS এর ​​ব্যবহারের দিকে ইঙ্গিত করে বলে মনে হচ্ছে http। আমার যদি HTTP অনুরোধগুলি থেকে দুটি বা আরও বেশি পর্যবেক্ষণগুলি তৈরি হয় তবে এর সমান Promise.all()?

উত্তর:


80

অনুকরণের জন্য আরও সহজ বিকল্প Promise.allহ'ল forkJoinঅপারেটরটি ব্যবহার করা (এটি সমান্তরালভাবে সমস্ত পর্যবেক্ষণ শুরু করে এবং তাদের শেষ উপাদানগুলিতে যোগ দেয়):

সামান্য সুযোগের বাইরে, তবে যদি এটি সাহায্য করে, শৃঙ্খলাবদ্ধ প্রতিশ্রুতিগুলির বিষয়ে, আপনি একটি সাধারণ ব্যবহার করতে পারেন flatMap: সিএফ। আরএক্সজেএস প্রতিশ্রুতি রচনা (পাসিং ডেটা)


4
যদি আমার 2 টি কল থাকে তবে একটি রিটার্নের প্রতিশ্রুতি এবং অন্যটি রিটার্ন পর্যবেক্ষণযোগ্য আমি কি ফর্কজইন ব্যবহার করতে পারি? বা প্রতিশ্রুতি। সমস্ত ()? বা কেউ নয়, আমাকে 2 টি ফাংশন একই ধরণের প্রতিশ্রুতি বা পর্যবেক্ষণযোগ্য হতে দিতে হবে?
জো স্লেমন

4
দয়া করে সহায়তা করুন, যখন পর্যবেক্ষকগুলি প্যারামিটার হিসাবে মানগুলি নির্গত করে না তখন ফোরজজাইন কাজ করে না। আমার কাছে পর্যবেক্ষণযোগ্য অকার্যকর এবং এখনও কাঁটাচামচের কার্যকারিতাটি ব্যবহার করতে চাই তবে এটি কাজ করছে না
গোগা কোরেলি

18

RxJs v6 ব্যবহার করে মে 2019 আপডেট করুন

অন্যান্য উত্তরগুলি দরকারী খুঁজে পেয়েছিল এবং zipব্যবহার সম্পর্কে আর্নাডের দেওয়া উত্তরের জন্য একটি উদাহরণ দেওয়ার ইচ্ছা পোষণ করেছে ।

এখানে একটি স্নিপেট Promise.allএবং আরএক্সজেএসের মধ্যে সমতা দেখানো হয়েছে zip(এটিও নোট করুন, rxjs6 এ জিপ কীভাবে এখন "rxjs" ব্যবহার করে আমদানিকারী হয় এবং অপারেটর হিসাবে নয়)।

import { zip } from "rxjs";

const the_weather = new Promise(resolve => {
  setTimeout(() => {
    resolve({ temp: 29, conditions: "Sunny with Clouds" });
  }, 2000);
});

const the_tweets = new Promise(resolve => {
  setTimeout(() => {
    resolve(["I like cake", "BBQ is good too!"]);
  }, 500);
});

// Using RxJs
let source$ = zip(the_weather, the_tweets);
source$.subscribe(([weatherInfo, tweetInfo]) =>
  console.log(weatherInfo, tweetInfo)
);

// Using ES6 Promises
Promise.all([the_weather, the_tweets]).then(responses => {
  const [weatherInfo, tweetInfo] = responses;
  console.log(weatherInfo, tweetInfo);
});

উভয় থেকে আউটপুট একই। উপরোক্ত চালনা দেয়:

{ temp: 29, conditions: 'Sunny with Clouds' } [ 'I like cake', 'BBQ is good too!' ]
{ temp: 29, conditions: 'Sunny with Clouds' } [ 'I like cake', 'BBQ is good too!' ]

12

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


4
এটি আমার বর্তমান প্রয়োজনগুলি পূরণ করে না তবে আমি খুব শীঘ্রই এটি ব্যবহার করব।
কোরি ওগবার্ন

4
যে Promise.all () হিসাবে একই আচরণ অর্জন করে না, কিন্তু এটা) Promise.any (অনুরূপ
Purrell

যদি আমার 2 টি কল থাকে তবে একটি রিটার্নের প্রতিশ্রুতি এবং অন্যটি রিটার্ন পর্যবেক্ষণযোগ্য আমি কি ফর্কজইন ব্যবহার করতে পারি? বা প্রতিশ্রুতি। সমস্ত ()? বা কেউ নয়, আমাকে 2 টি ফাংশন একই ধরণের প্রতিশ্রুতি বা পর্যবেক্ষণযোগ্য হতে দিতে হবে?
জো স্লেমন

4
: একটু দেরী @JoeSleiman, কিন্তু আপনি আপনার পাশ বাছাই করতে পারেন Observable.fromPromise () একসঙ্গে সঙ্গে Observable.zip () , অথবা Obserable.toPromise () Promise.all সঙ্গে ()
Arnaud পি

11

উপর reactivex.io forkJoin আসলে পয়েন্ট জিপ , যা আমার জন্য কাজ করেছেন:

let subscription = Observable.zip(obs1, obs2, ...).subscribe(...);

"তার মানে কাঁটাচামচ একাধিকবার নিঃসরণ করবে না এবং এটি পরে সম্পূর্ণ হবে you rxjs-dev.firebaseapp.com/api/index/function/forkJoin
জেফ্রি নিকলসন

4
ফর্কজয়াইন সকল পর্যবেক্ষণের সমাপ্তির জন্য অপেক্ষা করে, যখন জিপ একটি অ্যারে নির্গত করে যখন সমস্ত ইনপুটগুলি তাদের প্রথম মান নির্গত করে। জিপ অনেক সময় নির্গত হতে পারে। আপনার যদি এইচটিপি-কলগুলি থাকে তবে এতে কোনও তফাত হয় না।
hgoebl

ঠিক আছে, আমি এখন সূক্ষ্মতা পেতে, চিয়ার্স। আমি বুঝতে পারি নি যে ভাষার বিভাগগুলি প্রসারিত হয়েছে-_-
Arnaud P
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.