আমি কীভাবে জাভাস্ক্রিপ্টের প্রতিশ্রুতি ছাড়া প্রতিশ্রুতি ছাড়া অন্য কিছু প্রত্যাবর্তন করব?


38

মডিউলটিতে একটি পদ্ধতি প্রয়োগের জন্য আমার কাছে ক্লায়েন্টের কাছ থেকে একটি স্পেস রয়েছে:

 // getGenres():
 //  Returns a promise. When it resolves, it returns an array.

যদি ঘরানার একটি অ্যারে দেওয়া হয়,

['comedy', 'drama', 'action']

এখানে একটি প্রতিশ্রুতি সহ একটি কঙ্কাল পদ্ধতি:

MovieLibrary.getGenres = function() {
  var promise = new Promise(function(resolve, reject) {
    /* missing implementation */
  });

  return promise;
};

শৈলীতে পাওয়া ডেটা ফেরত দেওয়ার প্রতিশ্রুতি দেওয়া যেতে পারে? অনুমিত বিবরণ অর্জন করার জন্য আরও ভাল উপায় আছে?


8
প্রতিশ্রুতিগুলি "ফেরত" মান দেয় না, তারা সেগুলি একটি কলব্যাকে দেয় (যা আপনি সরবরাহ করেন then তারপর ())। অনুমানটি কেবল আমার কাছে বিভ্রান্ত হয়। এটি সম্ভবত এটি বলার চেষ্টা করছে যে resolve([genre1, genre2, ...]);প্রতিশ্রুতি বাস্তবায়নের অভ্যন্তরে আপনার করার কথা ।
Ixrec

উত্তর:


40

দেখে মনে হচ্ছে আপনি কীভাবে প্রতিশ্রুতি ব্যবহার করবেন তা বুঝতে পারছেন না। আপনি একটি প্রতিশ্রুতি ফিরে। তারপরে, পরে যখন আপনার কোড প্রতিশ্রুতিটি সমাধান করে, এটি এটিকে একটি ফলাফলের সাথে সমাধান করে এবং ফলাফলটি .then()প্রতিশ্রুতির সাথে সংযুক্ত হ্যান্ডলারের কাছে পৌঁছে দেওয়া হয় :

MovieLibrary.getGenres = function() {
  var promise = new Promise(function(resolve, reject) {
    /* missing implementation */
    resolve(result);
  });

  return promise;
};

MovieLibrary.getGenres().then(function(result) {
    // you can access the result from the promise here
});

5
এটি নিশ্চিত করে যে প্রতিশ্রুতি সেইভাবে কাজ করেছিল যা আমি প্রত্যাশা করেছিলাম।
সিলোকাল

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

26

awaitপরিবর্তে ব্যবহার করে আপডেট সংস্করণ .then()

awaitপ্রতিশ্রুতি সমাধান না হওয়া অবধি মৃত্যুদন্ড কার্যকর করা বন্ধ করে দেয় (অর্থাত্, এর একটি মান রয়েছে)। ব্যবহারের বিপরীতে .then()আপনি awaitপ্রতিশ্রুতি ফেরত বিভিন্ন ফাংশন চালানোর সাথে সাথে মানগুলি বজায় রাখতে পারবেন এবং পরের লাইনে এক্সিকিউশন অব্যাহত থাকবে (একে 'ডাইরেক্ট স্টাইল বলা হয়)। এটি দেখার পক্ষেও খুব সুন্দর, যেহেতু এটি অন্যান্য জায়গাগুলির চেয়ে বাকি জাভাস্ক্রিপ্টের সাথে সামঞ্জস্য .then()

// Example function that returns a Promise that will resolve after 2 seconds
var getGenres = function() {
  return new Promise(function(resolve) {
    setTimeout(function(){
      resolve(['comedy', 'drama', 'action'])
    }, 2000);
  });
}

// We start an 'async' function to use the 'await' keyword
(async function(){
  var result = await getGenres()
  console.log('Woo done!', result)

  // But the best part is, we can just keep awaiting different stuff, without ugly .then()s
  var somethingElse = await getSomethingElse()
  var moreThings = await getMoreThings()
})()

সমস্ত বর্তমান ব্রাউজার এবং নোডে ওউইট সমর্থিত


1
ওহে বাহ চেহারা, এই বিষয়ে 3 এসই প্রশ্ন এবং অবশেষে আমাদের কাছে একটি আসল উত্তর আছে!
অ্যান্ড্রু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.