সমান্তরালে async / অপেক্ষার ফাংশন কল করুন


431

আমি যতদূর বুঝতে পেরেছি, ES7 / ES2016-এ একাধিক কোডকে কোডে রেখে প্রতিশ্রুতি দিয়ে শৃঙ্খলার awaitঅনুরূপ কাজ করবে .then(), যার অর্থ তারা প্যারালারেলের পরিবর্তে একের পর এক মৃত্যুদন্ড কার্যকর করবে। সুতরাং, উদাহরণস্বরূপ, আমাদের এই কোডটি রয়েছে:

await someCall();
await anotherCall();

আমি কি এটি সঠিকভাবে বুঝতে পারি যে anotherCall()কেবল যখন someCall()সম্পন্ন হবে তখনই ডাকা হবে ? তাদের সমান্তরালে ডাকার সর্বাধিক মার্জিত উপায় কী?

আমি নোডে এটি ব্যবহার করতে চাই, তাই সম্ভবত অ্যাসিঙ্ক লাইব্রেরির সাথে কোনও সমাধান আছে?

সম্পাদনা: আমি এই প্রশ্নের যে সমাধানটি দিয়েছি তাতে সন্তুষ্ট নই: অ্যাসিঙ্ক জেনারেটরগুলিতে প্রতিশ্রুতির অপেক্ষমান অপেক্ষার কারণে ধীরগতি , কারণ এটি জেনারেটর ব্যবহার করে এবং আমি আরও সাধারণ ব্যবহারের ক্ষেত্রে জিজ্ঞাসা করছি।


1
@ অ্যাডিনিও এটি ভুল, জাভাস্ক্রিপ্ট কখনও তার নিজস্ব প্রসঙ্গে সমান্তরালে চলে না।
ব্লাইন্ডম্যান 67

5
@ ব্লাইন্ডম্যান - it - এটি কমপক্ষে ওপি বলতে বোঝায় যেভাবে দুটো অ্যাসিঙ্ক অপারেশন একই সাথে চলছে, তবে এই ক্ষেত্রে নয়, আমি যেটা লিখতে চেয়েছিলাম তা হ'ল তারা সিরিয়ালে চালায় , প্রথমটি awaitপ্রথম ফাংশনটি শেষ হওয়ার অপেক্ষায় থাকবে পুরোপুরি দ্বিতীয় চালানো আগে।
অ্যাডিনিও

3
@ ব্লাইন্ডম্যান 67 - এটি একক থ্রেডেড, তবে এই সীমাবদ্ধতা অ্যাসিঙ্ক পদ্ধতিতে প্রযোজ্য নয়, তারা একযোগে চালানো যেতে পারে, এবং কাজটি সম্পন্ন করার পরে প্রতিক্রিয়া ফিরিয়ে দিতে পারে, অর্থাত্ "সমান্তরাল" বলতে ওপি কী বোঝায়।
অ্যাডিনিও

7
@ ব্লাইন্ডম্যান 67 - আমি মনে করি এটি ওপি যা জিজ্ঞাসা করছে তা খুব পরিষ্কার হয়েছে, অ্যাসিঙ্ক / অপেক্ষার প্যাটার্ন ব্যবহার করে সিরিয়ালটিতে ফাংশনগুলি পরিচালিত হবে, যদিও তারা অ্যাসিঙ্ক হয়, তাই দ্বিতীয়টি বলা হওয়ার আগে প্রথমটি পুরোপুরি শেষ হবে etc. উভয় ফাংশনকে কীভাবে সমান্তরালে কল করতে হবে এবং যেহেতু তারা স্পষ্টভাবে অ্যাসিঙ্ক হিসাবে কাজ করে, উদ্দেশ্য তাদের একযোগে চালানো, সমান্তরালে উদাহরণস্বরূপ, দুটি এজ্যাক অনুরোধ একই সাথে করা, যা জাভাস্ক্রিপ্টে মোটেও সমস্যা নয়, বেশিরভাগ async পদ্ধতি হিসাবে যেমনটি আপনি উল্লেখ করেছেন, নেটিভ কোড চালায় এবং আরও থ্রেড ব্যবহার করে।
অ্যাডিনিও

3
@ বার্গি এটি লিঙ্কযুক্ত প্রশ্নের সদৃশ নয় - এটি বিশেষত async / প্রতীক্ষিত বাক্য গঠন এবং নেটিভ Promiseগুলি সম্পর্কে। লিঙ্কযুক্ত প্রশ্নটি জেনারেটর এবং ফলনের সাথে ব্লুবার্ড লাইব্রেরি সম্পর্কিত। ধারণাগতভাবে সম্ভবত একই, তবে বাস্তবায়নে নয়।
ইস্ট

উত্তর:


698

আপনি এখানে অপেক্ষা করতে পারেন Promise.all():

await Promise.all([someCall(), anotherCall()]);

ফলাফল সংরক্ষণ করতে:

let [someResult, anotherResult] = await Promise.all([someCall(), anotherCall()]);

দ্রষ্টব্য যে Promise.allদ্রুত ব্যর্থ হয়, যার অর্থ এটি প্রদত্ত প্রতিশ্রুতিগুলির সাথে সাথেই এটি প্রত্যাখ্যান করে, তারপরে পুরো জিনিসটি প্রত্যাখ্যান করে।

const happy = (v, ms) => new Promise((resolve) => setTimeout(() => resolve(v), ms))
const sad = (v, ms) => new Promise((_, reject) => setTimeout(() => reject(v), ms))

Promise.all([happy('happy', 100), sad('sad', 50)])
  .then(console.log).catch(console.log) // 'sad'

পরিবর্তে, আপনি যদি সমস্ত প্রতিশ্রুতি হয় তা পূরণ বা প্রত্যাখ্যানের জন্য অপেক্ষা করতে চান, তবে আপনি ব্যবহার করতে পারেন Promise.allSettled। দ্রষ্টব্য যে ইন্টারনেট এক্সপ্লোরার স্থানীয়ভাবে এই পদ্ধতিটিকে সমর্থন করে না।

const happy = (v, ms) => new Promise((resolve) => setTimeout(() => resolve(v), ms))
const sad = (v, ms) => new Promise((_, reject) => setTimeout(() => reject(v), ms))

Promise.allSettled([happy('happy', 100), sad('sad', 50)])
  .then(console.log) // [{ "status":"fulfilled", "value":"happy" }, { "status":"rejected", "reason":"sad" }]


78
পরিষ্কার করুন তবে প্রতিশ্রুতি.আল এর দ্রুত-ব্যর্থ আচরণ সম্পর্কে সচেতন হন। যদি ফাংশনগুলির মধ্যে কোনও ত্রুটি ছুড়ে দেয়, প্রতিশ্রুতি। সমস্ত প্রত্যাখ্যান করবে
NoNameProdided

11
আপনি আংশিক ফলাফলে সব ব্যবস্থা করতে সক্ষম চমত্কারভাবে সঙ্গে ASYNC / অপেক্ষা করে আছি দেখতে stackoverflow.com/a/42158854/2019689
NoNameProvided

131
প্রো টিপ: অর্ডার Promise.all (থেকে ফলাফল একটি অবাধ সংখ্যা ইনিশিয়ালাইজ করার জন্য অ্যারের ডেসট্রাকচারিং ব্যবহার), মত:[result1, result2] = Promise.all([async1(), async2()]);
জনি

10
@ জনি কী এই ব্যর্থতা দ্রুত সাপেক্ষে? এছাড়াও, একটি এখনও প্রয়োজন = await Promise.all?
TheUideSide

5
পছন্দ করুন
জনি

114

টি এল; ডিআর

Promise.allসমান্তরাল ফাংশন কলগুলির জন্য ব্যবহার করুন , ত্রুটি হওয়ার সময় উত্তর আচরণ সঠিকভাবে হয় না।


প্রথমে একবারে সমস্ত অ্যাসিক্রোনাস কলগুলি সম্পাদন করুন এবং সমস্ত Promiseবস্তু প্রাপ্ত করুন । দ্বিতীয়ত, বস্তুগুলিতে ব্যবহার awaitকরুন Promise। এইভাবে, আপনি প্রথম অপেক্ষারত Promiseঅন্য সমাধানের জন্য অপেক্ষাকৃত কলগুলি এখনও চলছে। সামগ্রিকভাবে, আপনি কেবলমাত্র সবচেয়ে ধীর অ্যাসিনক্রোনাস কল হিসাবে অপেক্ষা করবেন। উদাহরণ স্বরূপ:

// Begin first call and store promise without waiting
const someResult = someCall();

// Begin second call and store promise without waiting
const anotherResult = anotherCall();

// Now we await for both results, whose async processes have already been started
const finalResult = [await someResult, await anotherResult];

// At this point all calls have been resolved
// Now when accessing someResult| anotherResult,
// you will have a value instead of a promise

জেএসবিন উদাহরণ: http://jsbin.com/xerifanima/edit?js,console

ক্যাভ্যাট:await কলগুলি একই লাইনে বা বিভিন্ন লাইনে রয়েছে তা বিবেচ্য নয় , এতক্ষণ যতক্ষণ না সমস্ত অ্যাসিক্রোনাস কলের পরে প্রথম awaitকলটি ঘটে । জনিএইচকে এর মন্তব্য দেখুন।


আপডেট করুন: এই উত্তর হ্যান্ডলিং অনুযায়ী ভুলবশত একটি ভিন্ন সময়জ্ঞান হয়েছে @ bergi এর উত্তর , এটা নেই না ত্রুটি বর্জন যেমন ত্রুটি দেখা দেয় কিন্তু পরে সব প্রতিশ্রুতি মৃত্যুদন্ড কার্যকর করা হয়। আমি ফলাফল @ জনি এর টিপ সঙ্গে তুলনা করুন:, [result1, result2] = Promise.all([async1(), async2()])নিম্নলিখিত কোড স্নিপেট চেক

const correctAsync500ms = () => {
  return new Promise(resolve => {
    setTimeout(resolve, 500, 'correct500msResult');
  });
};

const correctAsync100ms = () => {
  return new Promise(resolve => {
    setTimeout(resolve, 100, 'correct100msResult');
  });
};

const rejectAsync100ms = () => {
  return new Promise((resolve, reject) => {
    setTimeout(reject, 100, 'reject100msError');
  });
};

const asyncInArray = async (fun1, fun2) => {
  const label = 'test async functions in array';
  try {
    console.time(label);
    const p1 = fun1();
    const p2 = fun2();
    const result = [await p1, await p2];
    console.timeEnd(label);
  } catch (e) {
    console.error('error is', e);
    console.timeEnd(label);
  }
};

const asyncInPromiseAll = async (fun1, fun2) => {
  const label = 'test async functions with Promise.all';
  try {
    console.time(label);
    let [value1, value2] = await Promise.all([fun1(), fun2()]);
    console.timeEnd(label);
  } catch (e) {
    console.error('error is', e);
    console.timeEnd(label);
  }
};

(async () => {
  console.group('async functions without error');
  console.log('async functions without error: start')
  await asyncInArray(correctAsync500ms, correctAsync100ms);
  await asyncInPromiseAll(correctAsync500ms, correctAsync100ms);
  console.groupEnd();

  console.group('async functions with error');
  console.log('async functions with error: start')
  await asyncInArray(correctAsync500ms, rejectAsync100ms);
  await asyncInPromiseAll(correctAsync500ms, rejectAsync100ms);
  console.groupEnd();
})();


11
এটি আমার কাছে প্রোমিস.এল এর চেয়ে অনেক ভাল বিকল্প বলে মনে হচ্ছে - এবং ডিস্ট্রাকচারিং অ্যাসাইনমেন্টের সাথে আপনি এমন কি করতে [someResult, anotherResult] = [await someResult, await anotherResult]পারেন যা আপনি যদি পরিবর্তন constকরেন তবে let
জাওজ

28
তবে এটি এখনও awaitবিবৃতিগুলি ক্রমিকভাবে কার্যকর করে, তাই না? এটি হ'ল, প্রথম awaitসমাধান হওয়া অবধি মৃত্যুদণ্ড বিরতি দেয় , তারপরে দ্বিতীয়টিতে চলে যায়। Promise.allসমান্তরালে চালায়।
আন্ড্রু

8
আপনাকে ধন্যবাদ হেভেন এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
স্টিফান ডি

87
এই উত্তরটি বিভ্রান্তিমূলক, কারণ উভয় অপেক্ষার একই লাইনে করা অপ্রাসঙ্গিক। বিষয়টি হ'ল উভয় async কলগুলি অপেক্ষার আগেই করা হয়েছিল।
জনিএইচকে

15
@ হ্যাভেন এই সমাধানটির মতো নয় Promise.all। যদি প্রতিটি অনুরোধটি একটি নেটওয়ার্ক কল হয়, এমনকি শুরু await someResultকরার আগেই await anotherResultএটি সমাধান করা দরকার । বিপরীতে, Promise.allদুটি awaitকল দুটি সমাধান করার আগেই শুরু করা যেতে পারে।
বেন উইন্ডিং

89

হালনাগাদ:

মূল উত্তরটি প্রতিশ্রুতি প্রত্যাখ্যানকে সঠিকভাবে পরিচালনা করা (এবং কিছু ক্ষেত্রে অসম্ভব) করে তোলে। সঠিক সমাধানটি ব্যবহার করা Promise.all:

const [someResult, anotherResult] = await Promise.all([someCall(), anotherCall()]);

আসল উত্তর:

কোনও একটির অপেক্ষার আগে আপনি উভয় ফাংশনকে কল করেছেন তা নিশ্চিত করুন:

// Call both functions
const somePromise = someCall();
const anotherPromise = anotherCall();

// Await both promises    
const someResult = await somePromise;
const anotherResult = await anotherPromise;

1
@ জেফফিশার আমি এমন মন্তব্য যুক্ত করেছি যা আশা করি এটি আরও পরিষ্কার হবে।
জোনাথন পটার

9
আমি মনে করি এটি অবশ্যই সবচেয়ে খাঁটি উত্তর
গেরশম

1
এই উত্তরটি হ্যাভেনের চেয়ে অনেক বেশি স্পষ্ট। এটি স্পষ্ট যে ফাংশন কলগুলি প্রতিশ্রুতিবদ্ধ অবজেক্টগুলি ফিরিয়ে awaitদেবে এবং তারপরে সেগুলি প্রকৃত মানগুলিতে সমাধান করবে।
ব্যবহারকারী 1032613

3
এটি কার্সারি নজরে কাজ করে বলে মনে হচ্ছে তবে আনহ্যান্ডেল প্রত্যাখ্যানগুলির সাথে ভয়ঙ্কর সমস্যা রয়েছেএটি ব্যবহার করবেন না!
বার্গি

1
@ বার্গি আপনি ঠিক বলেছেন, এটি নির্দেশ করার জন্য ধন্যবাদ! আমি উত্তরটি আরও ভাল সমাধান দিয়ে আপডেট করেছি।
জোনাথন পটার

24

সমান্তরালভাবে এটি করার জন্য প্রতিশ্রুতি ছাড়া সমস্ত উপায় আছে ():

প্রথমত, সংখ্যাগুলি মুদ্রণের জন্য আমাদের কাছে দুটি ফাংশন রয়েছে:

function printNumber1() {
   return new Promise((resolve,reject) => {
      setTimeout(() => {
      console.log("Number1 is done");
      resolve(10);
      },1000);
   });
}

function printNumber2() {
   return new Promise((resolve,reject) => {
      setTimeout(() => {
      console.log("Number2 is done");
      resolve(20);
      },500);
   });
}

এটি ধারাবাহিক:

async function oneByOne() {
   const number1 = await printNumber1();
   const number2 = await printNumber2();
} 
//Output: Number1 is done, Number2 is done

এটি সমান্তরাল:

async function inParallel() {
   const promise1 = printNumber1();
   const promise2 = printNumber2();
   const number1 = await promise1;
   const number2 = await promise2;
}
//Output: Number2 is done, Number1 is done

10

এটি Promise.allSettled () দিয়ে সম্পন্ন করা যেতে পারে যা Promise.all()ব্যর্থ-দ্রুত আচরণ ব্যতিরেকে একই রকম similar

async function failure() {
    throw "Failure!";
}

async function success() {
    return "Success!";
}

const [failureResult, successResult] = await Promise.allSettled([failure(), success()]);

console.log(failureResult); // {status: "rejected", reason: "Failure!"}
console.log(successResult); // {status: "fulfilled", value: "Success!"}

নোট : এই সীমিত ব্রাউজার সমর্থনের সঙ্গে একটি রক্তপাত প্রান্ত বৈশিষ্ট্য, তাই আমি হয় জোরালোভাবে এই ফাংশন জন্য polyfill সহ সুপারিশ।


7

আমি প্রতিশ্রুতি সমাধানের বিভিন্ন উপায়ের পরীক্ষার একটি সংক্ষিপ্তসার তৈরি করেছি , ফলাফল সহ। বিকল্পগুলি যে কাজ করে তা দেখতে সহায়ক হতে পারে।


সংক্ষেপে 4 এবং 6 টেস্টগুলি প্রত্যাশিত ফলাফলগুলি ফেরত দিয়েছে। দেখুন stackoverflow.com/a/42158854/5683904 যারা অপশন মধ্যে পার্থক্য ব্যাখ্যা NoNameProvided দ্বারা।
akraines

1
    // A generic test function that can be configured 
    // with an arbitrary delay and to either resolve or reject
    const test = (delay, resolveSuccessfully) => new Promise((resolve, reject) => setTimeout(() => {
        console.log(`Done ${ delay }`);
        resolveSuccessfully ? resolve(`Resolved ${ delay }`) : reject(`Reject ${ delay }`)
    }, delay));

    // Our async handler function
    const handler = async () => {
        // Promise 1 runs first, but resolves last
        const p1 = test(10000, true);
        // Promise 2 run second, and also resolves
        const p2 = test(5000, true);
        // Promise 3 runs last, but completes first (with a rejection) 
        // Note the catch to trap the error immediately
        const p3 = test(1000, false).catch(e => console.log(e));
        // Await all in parallel
        const r = await Promise.all([p1, p2, p3]);
        // Display the results
        console.log(r);
    };

    // Run the handler
    handler();
    /*
    Done 1000
    Reject 1000
    Done 5000
    Done 10000
    */

যদিও p1, p2 এবং p3 সেটিংটি তাদের কঠোরভাবে সমান্তরালে চালাচ্ছে না, তারা কোনও মৃত্যুদন্ড কার্যকর করে না এবং আপনি একটি ধরা দিয়ে প্রাসঙ্গিক ত্রুটিগুলি ফাঁদে ফেলতে পারেন।


2
স্ট্যাক ওভারফ্লোতে আপনাকে স্বাগতম। আপনার কোডটি প্রশ্নের উত্তর সরবরাহ করতে পারে তবে দয়া করে এর চারপাশে প্রসঙ্গটি যুক্ত করুন যাতে অন্যেরা এটি কী করে এবং এটি কেন আছে তা নিয়ে কিছু ধারণা থাকতে পারে।
থিও

1

আমার ক্ষেত্রে, আমার বেশ কয়েকটি কাজ রয়েছে যা আমি সমান্তরালভাবে সম্পাদন করতে চাই, তবে সেই কাজগুলির ফলাফলের সাথে আমার আলাদা কিছু করা দরকার।

function wait(ms, data) {
    console.log('Starting task:', data, ms);
    return new Promise(resolve => setTimeout(resolve, ms, data));
}

var tasks = [
    async () => {
        var result = await wait(1000, 'moose');
        // do something with result
        console.log(result);
    },
    async () => {
        var result = await wait(500, 'taco');
        // do something with result
        console.log(result);
    },
    async () => {
        var result = await wait(5000, 'burp');
        // do something with result
        console.log(result);
    }
]

await Promise.all(tasks.map(p => p()));
console.log('done');

এবং আউটপুট:

Starting task: moose 1000
Starting task: taco 500
Starting task: burp 5000
taco
moose
burp
done

গতিশীল সৃষ্টির জন্য দুর্দান্ত (
সংস্থাগুলির

1

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

আর একটি উপায় যা ভাগ করে নেওয়া উচিত তা হ'ল নোড.জেএস অ্যাসিঙ্ক যা আপনাকে সহজেই সমঝোতার পরিমাণ নিয়ন্ত্রণ করতে দেয় যা কার্যত এপিআই কল, আই / ও ক্রিয়াকলাপ হিসাবে সীমিত সংস্থাগুলির ব্যবহারের সাথে সরাসরি যুক্ত থাকলে, সাধারণত কাঙ্ক্ষিত হয়, প্রভৃতি

// create a queue object with concurrency 2
var q = async.queue(function(task, callback) {
  console.log('Hello ' + task.name);
  callback();
}, 2);

// assign a callback
q.drain = function() {
  console.log('All items have been processed');
};

// add some items to the queue
q.push({name: 'foo'}, function(err) {
  console.log('Finished processing foo');
});

q.push({name: 'bar'}, function (err) {
  console.log('Finished processing bar');
});

// add some items to the queue (batch-wise)
q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function(err) {
  console.log('Finished processing item');
});

// add some items to the front of the queue
q.unshift({name: 'bar'}, function (err) {
  console.log('Finished processing bar');
});

মাঝারি নিবন্ধ অটোরে ক্রেডিট ( আরও পড়ুন )


-5

আমি ভোট দিয়েছি:

await Promise.all([someCall(), anotherCall()]);

যে মুহুর্তে আপনি ফাংশনগুলি কল করবেন সে সম্পর্কে সচেতন থাকুন, এটি অপ্রত্যাশিত ফলাফলের কারণ হতে পারে:

// Supposing anotherCall() will trigger a request to create a new User

if (callFirst) {
  await someCall();
} else {
  await Promise.all([someCall(), anotherCall()]); // --> create new User here
}

তবে নিম্নলিখিতগুলি সর্বদা নতুন ব্যবহারকারী তৈরি করার অনুরোধটি ট্রিগার করে

// Supposing anotherCall() will trigger a request to create a new User

const someResult = someCall();
const anotherResult = anotherCall(); // ->> This always creates new User

if (callFirst) {
  await someCall();
} else {
  const finalResult = [await someResult, await anotherResult]
}

যেহেতু আপনি শর্ত পরীক্ষার বাইরে / আগে ফাংশনটি ঘোষণা করেন এবং তাদের ডেকেছিলেন। এগুলিকে elseব্লকে মোড়ানো চেষ্টা করুন ।
হ্যাভেন

@Haven: আমি বলতে চাচ্ছি যখন আপনি মুহূর্ত আপনি আলাদা কল ফাংশন বনাম অপেক্ষায় রয়েছেন অপ্রত্যাশিত ফলাফল হতে পারে যেমন,: ASYNC HTTP অনুরোধ।
হোয়াং লে আন তু

-6

আমি একটি সহায়ক ফাংশন ওয়েটএল তৈরি করি, এটি এটি আরও মিষ্টি করতে পারে। এটা শুধুমাত্র কাজ করে nodejs এখনকার জন্য, না ব্রাউজার Chrome এ।

    //const parallel = async (...items) => {
    const waitAll = async (...items) => {
        //this function does start execution the functions
        //the execution has been started before running this code here
        //instead it collects of the result of execution of the functions

        const temp = [];
        for (const item of items) {
            //this is not
            //temp.push(await item())
            //it does wait for the result in series (not in parallel), but
            //it doesn't affect the parallel execution of those functions
            //because they haven started earlier
            temp.push(await item);
        }
        return temp;
    };

    //the async functions are executed in parallel before passed
    //in the waitAll function

    //const finalResult = await waitAll(someResult(), anotherResult());
    //const finalResult = await parallel(someResult(), anotherResult());
    //or
    const [result1, result2] = await waitAll(someResult(), anotherResult());
    //const [result1, result2] = await parallel(someResult(), anotherResult());

3
না, সমান্তরালতা এখানে মোটেই ঘটছে না। forলুপ ক্রমানুসারে প্রতিটি প্রতিশ্রুতি অ্যাওয়েট্সওয়াচমেন এবং অ্যারে থেকে ফলাফলের যোগ করা হয়েছে।
Szczepan Hołyszewski

আমি বুঝতে পারছি এটি মানুষের পক্ষে কাজ করে না। সুতরাং আমি node.js এবং ব্রাউজারে পরীক্ষা করেছি। পরীক্ষাটি নোড.জেএস (ভি 10, ভি 11), ফায়ারফক্সে পাস করা হয়, এটি ব্রাউজার ক্রোমে কাজ করে না। পরীক্ষার কেসটি gist.github.com/fredyang/ea736a7b8293edf7a1a25c39c7d2fbbf
ফ্রেড ইয়াং

2
আমি এই বিশ্বাস করতে অস্বীকার করি। স্ট্যান্ডার্ডে এমন কিছু নেই যা বলে যে একটি ফর লুপের বিভিন্ন পুনরাবৃত্তি স্বয়ংক্রিয়ভাবে সমান্তরাল হতে পারে; এটি জাভাস্ক্রিপ্ট কীভাবে কাজ করে তা নয়। লুপ কোডটি যেভাবে লিখিত হয়েছে, এর অর্থ এই: "একটি আইটেমের জন্য অপেক্ষা করুন (অপেক্ষার এক্সপ্রেস), তখন ফলটি টেম্পোর দিকে চাপান, তারপরে পরবর্তী আইটেমটি গ্রহণ করুন (লুপের জন্য পরবর্তী পুনরাবৃত্তি) প্রতিটি আইটেমের" অপেক্ষার "সম্পূর্ণরূপে লুপ একটি একক পুনরাবৃত্তির মধ্যে সীমাবদ্ধ তাহলে পরীক্ষার দেন parallelization আছে, এটা হতে হবে কারণ transpiler কিছু নন-স্ট্যান্ডার্ড করছেন বা ফ্ল্যাট আউট বগী
Szczepan Hołyszewski

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

কেন এটিকে এত ভারী করা হচ্ছে তা নিশ্চিত নয়। @ ব্যবহারকারী 2883596 যেটি দিয়েছে তা মূলত এটি একই উত্তর।
জোনাথন সুদিয়ামান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.